首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring java:拦截器sendRedirect循环

问spring java:拦截器sendRedirect循环
EN

Stack Overflow用户
提问于 2014-07-17 11:22:21
回答 1查看 1.4K关注 0票数 0

我实现了一个拦截器,执行某些检查和sendRedirect到一些页面。目前我在没有任何条件的情况下测试它,只是简单地在preHandle被调用时使用sendRedirect。这是我的实现:

代码语言:javascript
复制
class HttpInterceptorMgr implements HandlerInterceptor {
    public boolean preHandle(HttpServleRequest aRequest, HttpServletResponse aResponse, Object aHandler) {
     try {
      sendRedirect("/somepage");
      return false;
     }
     catch(Exceptio n e) {
      // Do something else
     }
    }
}

web.xml

代码语言:javascript
复制
<servlet-mapping>
 <servlet-name>myproject</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>

....
<filter>
 <filter-name>springSecurityFilterChain</filter-name>
 <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
 <filter-name>springSecurityFilterChain</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
...

myproject-web-servlet.xml

代码语言:javascript
复制
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/images/**" location="/images/" />

<mvc:interceptors>
 <bean class="org.mycompany.HttpInterceptorMgr" />
</mvc:interceptors>

applicationContextSecurityBeans.xml

代码语言:javascript
复制
<security:http auto-config="true" use-expression="true" access-denied-page="/user/denied">
 <security:form-login
   login-page="/login"
   authentication-failure-url="login?error=true"
   default-target-url="/homepage" />
 <security:logout invalidate-session="true"
   logout-success-url="/login"
   logout-url="/j_sring_security_logout" />
</security:http>

我面临的问题是我的页面在循环中被重定向。在firefox浏览器上,它显示“页面未正确重定向”。我跟踪catalina.out,它显示它多次进入预句柄,并且它的request.getRequestUrl是/somepage。但是我不能成功地访问这个页面。

EN

回答 1

Stack Overflow用户

发布于 2014-07-17 12:04:16

所发生的是因为您的拦截器没有任何条件,即使是对"/somepage“的重定向请求,它也会再次发送一个重定向,这将在循环中进行。

您可以检查请求是否发往"/somepage“,如果是,则不应再次重定向。

代码语言:javascript
复制
class HttpInterceptorMgr implements HandlerInterceptor {
    public boolean preHandle(HttpServleRequest aRequest, HttpServletResponse aResponse, Object aHandler) {
     try {
      if(!aRequest.getRequestURL().toString().endswith("/somepage")) {
          sendRedirect("/somepage");
          return false;
      }          
     }
     catch(Exceptio n e) {
      // Do something else
     }
     return true;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24794379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档