View Javadoc

1   /*
2    * This software was designed and created by Jason Carroll.
3    * Copyright (c) 2002, 2003, 2004 Jason Carroll.
4    * The author can be reached at jcarroll@cowsultants.com
5    * ITracker website: http://www.cowsultants.com
6    * ITracker forums: http://www.cowsultants.com/phpBB/index.php
7    *
8    * This program is free software; you can redistribute it and/or modify
9    * it only under the terms of the GNU General Public License as published by
10   * the Free Software Foundation; either version 2 of the License, or
11   * (at your option) any later version.
12   *
13   * This program is distributed in the hope that it will be useful,
14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   * GNU General Public License for more details.
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  }