0

私のアプリケーションは Struts2 を使用して開発されており、セッション属性に基づいてユーザーがログオンしているかどうかを検証するインターセプターがあります。ここで、セッションがタイムアウトになり、ユーザーが再度ログインを試みたとします。ログインが成功したら、再ログインしたユーザーを処理し、ユーザーを作業中の最後のページに戻すにはどうすればよいですか...たとえば、page3.jsp??

loginInterceptor は

 public class LoginInterceptor extends AbstractInterceptor {
  @Override
   public String intercept(final ActionInvocation invocation) throws Exception {
    Map<String, Object> session = ActionContext.getContext().getSession();

   String userLoggedin = (String) session.get("userLoggedin ");
    Object action = invocation.getAction();

    // user is not logged in yet
    if(userLoggedin == null){       


        // public pages that dont require login
        if (action instanceof LoginNotRequired) {
              return invocation.invoke();

        }

        // Pages that require the user to be logged in - user not logged in yet
        if (!(action instanceof LoginAction)) {
             return "loginRedirect";

        }       

    }

    // user is logged in
    if (userLoggedin.equals("true")) {
         return invocation.invoke();

    }

    return invocation.invoke();
}

}

struts.xml 定義

    <interceptors>
        <interceptor name="login" class="com.mypackage.LoginInterceptor">                
             </interceptor>
        <interceptor-stack name="myStack">
            <interceptor-ref name="login"></interceptor-ref>
             <interceptor-ref name="defaultStack"></interceptor-ref>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="myStack"></default-interceptor-ref>

    <global-results>
        <result name="loginRedirect" type="redirect">/index.jsp</result>
    </global-results>
4

1 に答える 1

0

セッションの削除後も情報を保持する必要があります。これは、アプリケーション スコープ内のuser id/name=>last pageマップ、DB など、およびユーザーの最後の要求に基づいてこの情報を最新に保つインターセプターのいずれかを意味します。

Cookie のように、この情報をクライアントにも保持できる可能性があります。

ログインは単に上記のデータの存在をチェックし、見つかった場合はそこにリダイレクトします。

これには多くの潜在的な問題があります。たとえば、ユーザーのワークフローがセッション内の特定の情報に依存している場合、その情報は失われており、復元する必要があります。

于 2012-09-05T19:52:22.340 に答える