java - struts2 拦截器重定向两次以执行操作

标签 java redirect struts2 interceptor

我有一个登录拦截器,用于检查 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/

相关文章:

java - 停止将命令行参数中的通配符扩展到 Java

javascript - 使用屏幕分辨率的移动重定向

java - 如何在 Ubuntu 16.04 上配置 Postfix,以从 Java Web 应用程序发送邮件

javascript - Chrome API 的 onBeforeRedirect 无法正常工作?

python - 如果不使用 Django 刷新页面,则无法使用提交按钮

java - Spring3 与 Struts2 的集成

web-applications - 如果我使用struts2,Jboss如何处理http请求

java struts2 奇怪的序列化行为(自行舍入大数)

java - 为什么JLS声明最大的int字面量是2147483648?

java - 使用 aspectj 修改现有的 java 类行为?