私はセッションメンバーオブジェクトをチェックする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>
特定の操作ではありません。インターセプタはcom.opensymphony.xwork2.interceptor.Interceptorの簡単な実装クラスです – erhan
あなたの懸念を明確にすることはできますか?インターセプタは通常2回呼び出されます。そのため、インターセプタはスタックです。スタックをドリルダウンしてアクションを呼び出すと、スタックに戻ります。あなたがリダイレクトしている場合、それは再び呼び出されます...しかし、リダイレクトは一般的に回避されるべきものです。プロセス全体が非常に高速ですので、何か他に何か起こっていなければ問題ではありません。ちょうど言うことができます:actionInvocation.getInvocationContext()。getSession()と2番目の行を削除します。 – Quaternion
@Quaternion「2回呼び出される」というわけではありません。一度呼び出され、アクションの実行がラップされます。リダイレクションを避ける理由もわかりません。それについての議論は何ですか? –