Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringJava:拦截器sendRedirect循环_Java_Spring_Spring Mvc - Fatal编程技术网

SpringJava:拦截器sendRedirect循环

SpringJava:拦截器sendRedirect循环,java,spring,spring-mvc,Java,Spring,Spring Mvc,我实现了一个拦截器,它执行某些检查并发送重定向到某个页面。目前我正在测试它,没有任何条件,只要在调用preHandle时发送重定向即可。这是我的实现: class HttpInterceptorMgr implements HandlerInterceptor { public boolean preHandle(HttpServleRequest aRequest, HttpServletResponse aResponse, Object aHandler) { try {

我实现了一个拦截器,它执行某些检查并发送重定向到某个页面。目前我正在测试它,没有任何条件,只要在调用preHandle时发送重定向即可。这是我的实现:

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

<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

<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

<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,它显示它多次输入prehandle,其request.getRequestUrl为/somepage。但是我无法成功到达该页面。

发生的情况是,您的拦截器没有条件,即使重定向请求到/somepage,它也会再次发送重定向,这将在循环中通过

您可以检查请求是否指向/somepage,如果是,则不应再次重定向

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;
    }
}

嗨,shazin,谢谢你的快速回复。好的,我试过你的方法,现在我得到了一个空白的白页。