1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.itracker.web.actions.user;
20
21 import java.io.IOException;
22
23 import javax.servlet.ServletException;
24 import javax.servlet.http.Cookie;
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpServletResponse;
27 import javax.servlet.http.HttpSession;
28
29 import org.apache.log4j.Logger;
30 import org.apache.struts.action.ActionForm;
31 import org.apache.struts.action.ActionForward;
32 import org.apache.struts.action.ActionMapping;
33 import org.itracker.model.User;
34 import org.itracker.web.actions.base.ItrackerBaseAction;
35 import org.itracker.web.util.Constants;
36 import org.itracker.web.util.SessionManager;
37
38
39
40 public class LogoffAction extends ItrackerBaseAction {
41 private static final Logger log = Logger.getLogger(LogoffAction.class);
42
43
44 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
45 try {
46
47 HttpSession session = request.getSession(true);
48 User user = (User) session.getAttribute("user");
49 String login = (user != null ? user.getLogin() : "UNKNOWN");
50
51 if(clearSession(login, request, response)) {
52 log.info("User " + login + " logged out successfully.");
53 }
54 } catch(Exception e) {
55 if (log.isDebugEnabled())
56 log.debug("execute: Error logging out user. " + e.getMessage());
57 }
58
59 String pageTitleKey = "itracker.web.login.title";
60 String pageTitleArg = "";
61 request.setAttribute("pageTitleKey",pageTitleKey);
62 request.setAttribute("pageTitleArg",pageTitleArg);
63
64 return mapping.findForward("login");
65 }
66
67 public boolean clearSession(String login, HttpServletRequest request, HttpServletResponse response) {
68 try {
69
70 Cookie cookie = new Cookie(Constants.COOKIE_NAME, "");
71 cookie.setPath(request.getContextPath());
72 if (log.isDebugEnabled()) {
73 log.debug("clearSession: remove autologin cookie");
74 }
75 cookie.setValue("");
76 cookie.setMaxAge(0);
77
78 response.addCookie(cookie);
79
80 HttpSession session = request.getSession(true);
81 session.invalidate();
82
83 if(login != null) {
84 SessionManager.invalidateSession(login);
85 }
86 } catch(Exception e) {
87 log.debug("Unable to clear session for user " + (login == null ? "UNKNOWN" : login));
88 return false;
89 }
90 return true;
91 }
92 }