2012-02-14 10 views
0

私はセッションメンバーオブジェクトをチェックするlogininterceptorを持っています。それがnullの場合は、ログインページにリダイレクトします。struts2インターセプターがアクションに2回リダイレクト

すべてのアクションブロックにこのインターセプタがあります。問題は、インターセプタにヒットしたアクションを呼び出すときです。それが真の場合、アクションメソッドに続き、「成功」または「入力」を返し、再びインターセプタをヒットして、選択した結果名をリダイレクトします。

インターセプタを2回呼び出すことを防ぐにはどうすればよいですか?

インターセプタコード:

public String intercept(ActionInvocation actionInvocation) throws Exception { 
     HttpServletRequest request = (HttpServletRequest) actionInvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST); 
     HttpSession session = request.getSession(); 

    if (session.getAttribute("member")==null) { 

     return Action.LOGIN; 
    } else { 
     return actionInvocation.invoke(); 
    } 
} 

struts.xmlアクションビュー:

<action name="actionName" class="actionClass" method="init"> 
     <interceptor-ref name="loginStack"/> 
     <result name="input">show.jsp</result> 
    </action> 
+0

特定の操作ではありません。インターセプタはcom.opensymphony.xwork2.interceptor.Interceptorの簡単な実装クラスです – erhan

+0

あなたの懸念を明確にすることはできますか?インターセプタは通常2回呼び出されます。そのため、インターセプタはスタックです。スタックをドリルダウンしてアクションを呼び出すと、スタックに戻ります。あなたがリダイレクトしている場合、それは再び呼び出されます...しかし、リダイレクトは一般的に回避されるべきものです。プロセス全体が非常に高速ですので、何か他に何か起こっていなければ問題ではありません。ちょうど言うことができます:actionInvocation.getInvocationContext()。getSession()と2番目の行を削除します。 – Quaternion

+0

@Quaternion「2回呼び出される」というわけではありません。一度呼び出され、アクションの実行がラップされます。リダイレクションを避ける理由もわかりません。それについての議論は何ですか? –

答えて

2

あなたはそれが二回呼び出されます、もちろんその参照文献で同じインターセプタを持っている結果にをリダイレクト場合。

は前方 JSPにあなたがここに表示されて、あなた場合、インターセプタはが再び呼び出されることはありません。


すべてのアクションでこれを宣言する必要はありません。デフォルトのインターセプタスタックを設定してください。 でないアクションの場合このスタック(ログインなど)は、このインターセプタを含まないアクションのインターセプタ参照を定義する必要があります。

関連する問題