我最近从spring 3.0.5升级到4.1.1,从spring-security 3.0.5升级到3.2.5,并为应用程序添加了csrf支持。
在应用程序中,过滤器会进行某些检查,并在需要时重定向到更改密码页面。虽然它之前工作正常,但在上述变化之后它已经停止工作。现在,只要过滤器使用 response.sendRedirect()重定向,请求就会陷入循环,浏览器会显示页面未正确重定向
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 working和Spring security + sendRedirect not working