我有一个logininterceptor来检查会话成员对象,如果是null,则将其重定向到登录页面,否则继续执行。
每个动作块都有这个拦截器。问题是当你调用action时它会拦截拦截器,如果是true,则继续执行action方法,然后返回“success”或“input”然后再次命中拦截器以重定向所选结果名称。
如何阻止两次调用拦截器?
拦截器代码:
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 :(得分:2)
如果将重定向到其refs中具有相同拦截器的结果,那么它将被调用两次。
如果您在此处显示转发到JSP,则拦截器将不再再次被调用。
没有必要为每个动作声明这个 - 设置默认的拦截器堆栈。对于不需要此操作的操作(如登录),为不包含此拦截器的操作定义拦截器参考。