struts2拦截器重定向两次动作

时间:2012-02-14 13:49:39

标签: java redirect struts2 interceptor

我有一个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>

1 个答案:

答案 0 :(得分:2)

如果重定向到其refs中具有相同拦截器的结果,那么它将被调用两次。

如果您在此处显示转发到JSP,则拦截器将不再再次被调用。


没有必要为每个动作声明这个 - 设置默认的拦截器堆栈。对于需要此操作的操作(如登录),为不包含此拦截器的操作定义拦截器参考。