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";
  }
}

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";
4

1 に答える 1

0

そのロジックを明示的に記述する必要がありますが、デフォルトではそうではありません。

セッションからユーザーを削除した後のログアウト アクションで、それも無効にします。

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

次に、インターセプターでセッションが有効かどうかを確認し、そうでない場合は属性を追加して、セッションの有効期限が切れたか、ログアウトしたことを示します。

したがって、インターセプターコードは次のようになります。

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);

次に、ログイン画面を表示するときにjspページの場合、リクエストに「SessionExpired」属性があるかどうかを確認し、ある場合はそれをユーザーに表示します。

于 2012-05-12T18:47:01.060 に答える