我有一个登录拦截器,用于检查 session 成员对象,如果它为空,则将其重定向到登录页面,否则继续操作。
每个 Action block 都有这个拦截器。问题是,当您调用操作时,它会命中拦截器,如果是 true,则继续执行操作方法,然后返回“成功”或“输入”,然后再次命中拦截器以重定向所选结果名称。
如何防止调用拦截器两次?
拦截器代码:
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 View :
<action name="actionName" class="actionClass" method="init">
<interceptor-ref name="loginStack"/>
<result name="input">show.jsp</result>
</action>
最佳答案
如果您重定向到其引用中具有相同拦截器的结果,当然它会被调用两次。
如果您转发到此处所示的 JSP,拦截器将不会再次被调用。
<小时/>没有必要为每个操作都声明这一点——设置默认的拦截器堆栈。对于不需要此堆栈的操作(例如登录),请为不包含此拦截器的操作定义拦截器引用。
关于java - struts2 拦截器重定向两次以执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9278027/