升级spring ans spring-security版本后,卡在重定向循环中

时间:2015-11-05 11:11:16

标签: java spring redirect spring-security

我最近从spring 3.0.5升级到4.1.1,从spring-security 3.0.5升级到3.2.5,并为应用程序添加了csrf支持。

在应用程序中,过滤器会进行某些检查,并在需要时重定向到更改密码页面。虽然它之前工作正常,但在上述变化之后它已经停止工作。现在,只要过滤器使用 response.sendRedirect()重定向,请求就会陷入循环,浏览器会显示页面未正确重定向

Request Logs using FireBug

web.xml更改

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/WEB-INF/spring-servlet.xml,/WEB-INF/applicationContext.xml
    </param-value>
</context-param>

<filter>
    <filter-name>MultipartFilter</filter-name>
    <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MultipartFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

重定向过滤器

String userRole = secUserVo.getRoleName();
  String userType = secUserVo.getSubRoleName();

  if (userRole.equals("ROLE_MERCHANT")) {
    if (userType.equals("MANAGER")) 
      redirectUrl = context + MERCHANT_URL;
    else 
      redirectUrl = context + MERCHANT_SUB_USER_URL;
  } 
  else if (userRole.equals("ROLE_MERCHANT_SALES_ADMIN")) {
    if (userType.equals("MANAGER")) 
      redirectUrl = context + MERCHANT_SALES_URL;
    else 
      redirectUrl = context + MERCHANT_SALES_SUB_USER_URL;
  } 

  response.sendRedirect(redirectUrl);

重定向到更改密码屏幕的控制器

  @RequestMapping(method = RequestMethod.GET)
  public String initForm(ModelMap model, Principal principal) throws GenericException {
    ChangePasswordVO changePasswordVO = new ChangePasswordVO();
    model.addAttribute("changePassword", changePasswordVO);
    return "merchant/PasswordRecoveryForm";
  }

我确实尝试通过大量调试来追踪原因,但这没有帮助。搜索Stackoverflow但这也没有帮助。我读到的一些参考文献是Getting a Loop Redirect with Spring Security + CAS, but should be workingSpring security + sendRedirect not working

0 个答案:

没有答案