2012-05-12 17 views
1

私はstruts 2ログインインターセプタを使用しています。コードは正常に動作しています。私のアプリケーションでは、多くのポップアップウィンドウが使用されています。ポップアップウィンドウを開き、メインウィンドウのポップアップウィンドウからログインページを表示してログアウトしましたが、このシナリオのためだけに、メッセージが表示されます。すでにログアウトしています)。いずれかの変更がログアウトしたメインウィンドウの後にポップアップウィンドウがまだリンクしています

LoginInterceptor.java

public class LoginInterceptor extends AbstractInterceptor implements 
     StrutsStatics{ 

     private AdminUserSessionInfo objAdminUserSessionInfo = new AdminUserSessionInfo(); 

    private static final long serialVersionUID = 1L; 

    private static final Log log = LogFactory.getLog(LoginInterceptor.class); 

    private static final String LOGIN_ATTEMPT = "loginAttempt"; 

    private static final String LOGIN_OUT = "loginOut"; 

    private static final String USER_HANDLE = "loggedInUser"; 

    Map sessionMap = null; 


    public void init() { 
     log.info("Intializing LoginInterceptor"); 
    } 

    public void destroy() { 
    } 

    public String intercept(ActionInvocation invocation) throws Exception { 

     final ActionContext context = invocation.getInvocationContext(); 

     HttpServletRequest request = (HttpServletRequest) context 
       .get(HTTP_REQUEST); 


     HttpServletResponse response = (HttpServletResponse) context 
     .get(HTTP_RESPONSE); 

     response.setHeader("Cache-Control", "no-store"); 

     response.setHeader("Pragma", "no-cache"); 

     response.setDateHeader("Expires", 0); 




     HttpSession session = request.getSession(true); 


     Object user = session.getAttribute(USER_HANDLE); 

     String loginOut = request.getParameter(LOGIN_OUT); 




     if (user == null) {   

      String loginAttempt = request.getParameter(LOGIN_ATTEMPT);    

      System.out.println("loginAttemp---->"+loginAttempt); 

      /* The user is attempting to log in. */ 
      if (!StringUtils.isBlank(loginAttempt)) { 


       return invocation.invoke(); 
      } 
      return "login"; 
     } else { 

      return invocation.invoke(); 
     } 





    } 

web.xmlの

<interceptors> 
     <interceptor class="org.iaf.aos.common.LoginInterceptor" 
      name="loginInterceptor"></interceptor>   
     <interceptor-stack name="loginStack"> 
      <interceptor-ref name="loginInterceptor" /> 
      <interceptor-ref name="defaultStack" /> 
     </interceptor-stack>   
    </interceptors> 

    <default-interceptor-ref name="loginStack"></default-interceptor-ref> 
    <global-results><result name="login">aos.jsp</result></global-results> 
     <action name="checkUserLogin" class="org.iaf.aos.web.login.action.AdminUserAction" method="checkUserLogin"> 
         <!-- <result name="success">index.jsp</result> --> 
         <interceptor-ref name="loginStack"></interceptor-ref> 
         <result name="success" type="chain">HomePage</result> 
         <result name="error">WEB-INF/jsp/admin/Error.jsp</result> 
         <result name="selectRole">aos1.jsp</result> 
         <!--<result name="selectRole">WEB-INF/jsp/admin/SelectRole.jsp</result>--> 
        </action> 

       <action name="home"> 
        <!-- <result>index.jsp</result>--> 
        <interceptor-ref name="loginStack"></interceptor-ref> 
        <result name="success" type="chain">HomePage</result> 
       </action> 

       <action name="logOutUser" class="org.iaf.aos.web.login.action.LogOutUserAction">      
        <interceptor-ref name="loginStack"></interceptor-ref>     
        <result name="logout">WEB-INF/jsp/admin/LoggedOut.jsp 
        </result> 
       </action> 

LogOutUserAction.java

public class LogOutUserAction extends ActionSupport { 

    private static final long serialVersionUID = 1L; 

public String execute() throws Exception { 
     System.out.println("inside :: LogOutUserAction------"); 

     Map session = ActionContext.getContext().getSession(); 


    session.remove("loggedInUser"); 
    return "logout"; 
    } 
} 

ログアウト要求される場合

は私のコードを通して行ってください。 jsp

<td width="*" align="right" valign="top">         
            <s:url var="urlLogOut" action="logOutUser.action">        
             <s:param name="loginOut" value="%{'2'}"/>          
            </s:url> 
            <sx:a href="%{#urlLogOut}" targets="divAddEditUser"> 
             <font color="white">Log Out</font> 
            </sx:a> 
             <!--<a href="logOutUser.action"><font color="white">Log Out</font></a> 
            --></td> 
           </tr> 

AdminUserAction.java

ServletActionContext.getRequest().getSession().setAttribute("loggedInUser", loginId); 

    return "selectRole"; 

答えて

0

あなたは明示的にそれがデフォルトで行う文句を言わない、そのロジックを記述することを行う必要があります。

セッションからユーザーを削除した後のログアウトアクションでも、無効にしてください。セッションが有効であるか、ないならば、あなたは属性を追加しない場合

session.remove("loggedInUser"); 
session.invalidate(); 
session = null; 

は、その後、あなたのインターセプタでは、あなたのセッションの期限が切れたか、またはログアウトしている旨、確認してください。あなたはログイン画面を表示したときに、要求が「のsessionExpired」属性を持っている場合はそうはユーザーにあることを示している場合は、チェックJSPページなら、

HttpSession session = request.getSession(true); 
if(session == null){ 
    request.setAttribute("SessionExpired","Your session has expired or you have logged out"); 
} 
Object user = session.getAttribute(USER_HANDLE); 

:だからあなたのインターセプタコードはこのようなものになる

関連する問題