10

私は現在、Struts 2 を学習中です。現在、未確認のユーザーがログイン フォームにリダイレクトされる単純なアプリケーションを構築しています。

ユーザーの資格情報を取得し、それらを検証してユーザーオブジェクトをセッションに保存するログインフォームとアクション機能がありますが、ログインが行われる前にページへのアクセスを防止しようとしており、インターセプターを使用してこれを実行しようとしています.

私の問題は、 User オブジェクトがセッションに保存されているかどうかを確認するインターセプターを作成しましたが、保存されていない場合はログインページにリダイレクトしたいのですが、ストラットをバイパスしてを使用せずにこれを行う方法を見つけることができないことですHttpServletResponse.sendRedirect メソッド

構成:

<package name="mypackage" extends="struts-default" namespace="/admin">

    <interceptors>
        <interceptor name="login" class="my.LoginInterceptor" />
    </interceptors>

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

    <action name="login" class="my.LoginAction">
        <result name="input">/admin/login.jsp</result>
        <result name="success" type="redirect">/admin</result>
    </action>

    <action name="private" class="my.PrivateAction">
        <result>/admin/private.jsp</result>
    </action>

</package>

インターセプター コード:

@Override
public String intercept(ActionInvocation inv) throws Exception {

    Map<String, Object> session = inv.getInvocationContext().getSession();

    Object user = session.get("user");
    if(user == null) {

                      // redirect to the 'login' action here            

    }
    else {
        return inv.invoke();
    }

}
4

3 に答える 3

18

標準的な方法は、特別なグローバル結果 (「 login 」など)を返し、その結果から .xml へのグローバル マッピングを定義することadmin/login.jspです。したがって、次の行を追加するだけです。

if(user == null) {
      return "login";
}

そしてあなたのstruts.xml

<global-results>
   <result name="login">/admin/login.jsp</result>
</global-results>

ところで、デフォルトの Struts2 インターセプター スタックを単一のインターセプターに置き換えているのではないかと心配しています。通常、インターセプターをスタックに追加します。例えば:

<interceptors>
 <interceptor name="login" class="my.LoginInterceptor" />

 <interceptor-stack name="stack-with-login">
  <interceptor-ref name="login"/>
  <interceptor-ref name="defaultStack"/>
 </interceptor-stack>
</interceptors>
<default-interceptor-ref name="stack-with-login"/>

BTW2: もちろん、インターセプターをログイン アクションに適用してはいけません。

于 2010-06-08T18:04:23.023 に答える
2

カスタム ログイン インターセプターを使用した struts2 の完全な例は、こちらで確認できます。

http://sandeepbhardwaj.github.io/2010/12/01/struts2-with-login-interceptor.html

素晴らしいチュートリアル。

于 2010-12-14T10:27:35.853 に答える