1 19 20 package com.sslexplorer.setup.actions; 21 22 import java.util.Map ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 import javax.servlet.http.HttpServletResponse ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.apache.struts.Globals; 30 import org.apache.struts.action.ActionForm; 31 import org.apache.struts.action.ActionForward; 32 import org.apache.struts.action.ActionMapping; 33 import org.apache.struts.action.ActionMessage; 34 import org.apache.struts.action.ActionMessages; 35 36 import com.sslexplorer.agent.DefaultAgentManager; 37 import com.sslexplorer.core.RedirectWithMessages; 38 import com.sslexplorer.core.actions.AuthenticatedAction; 39 import com.sslexplorer.policyframework.Permission; 40 import com.sslexplorer.policyframework.PolicyConstants; 41 import com.sslexplorer.security.LogonControllerFactory; 42 import com.sslexplorer.security.SessionInfo; 43 44 public class LogoffSessionAction extends AuthenticatedAction { 45 46 static Log log = LogFactory.getLog(LogoffSessionAction.class); 47 48 public LogoffSessionAction() { 49 super(PolicyConstants.STATUS_TYPE_RESOURCE_TYPE, new Permission[] { PolicyConstants.PERM_VIEW }); 50 } 51 52 public ActionForward onExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 53 throws Exception { 54 String ticket = request.getParameter("ticket"); 55 if (ticket == null || ticket.equals("")) { 56 throw new Exception ("No ticket parameter provided."); 57 } else { 58 59 try { 60 if (ticket.equals(this.getSessionInfo(request).getLogonTicket())) { 61 log.error("You cannot log yourself off."); 62 ActionMessages mesgs = new ActionMessages(); 63 mesgs.add(Globals.ERROR_KEY, new ActionMessage("status.sessions.cannotLogoffYourself")); 64 saveErrors(request, mesgs); 65 return new RedirectWithMessages(mapping.findForward("success"), request); 66 } 67 Map map = LogonControllerFactory.getInstance().getActiveSessions(); 68 synchronized (map) { 69 SessionInfo info = (SessionInfo) map.get(ticket); 70 if (info == null) { 71 throw new Exception ("No session with ticket " + ticket); 72 } else { 73 if(info.getType() == SessionInfo.UI || info.getType() == SessionInfo.DAV_CLIENT) { 74 info.invalidate(); 75 } 76 else if(info.getType() == SessionInfo.AGENT) { 77 DefaultAgentManager.getInstance().unregisterAgent(info); 78 } 79 } 80 } 81 } catch(IllegalStateException ex) { 82 83 try { 85 LogonControllerFactory.getInstance().logoff(ticket); 86 } catch(Throwable t) {} 87 } 88 } 89 return mapping.findForward("success"); 90 } 91 92 public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 93 return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.USER_CONSOLE_CONTEXT; 94 } 95 } | Popular Tags |