我正在使用Spring Security来保护对网站的HTTP请求。主要用途是保护页面安全,以便在尝试访问这些页面时将用户重定向到登录页面。
但是,我还有一个要求。在我的模型中,我可以将用户密码标记为临时密码,这样,当用户成功登录时,应自动强制他们更改密码。更改密码后,应将其转发到最初尝试访问的页面。
有人为此目的使用过Spring Security吗?我需要创建自己的自定义过滤器吗?
谢谢,
在Spring Security 3.0中,你可以实现一个custom AuthenticationSuccessHandler。
custom AuthenticationSuccessHandler
在此处理程序中,你可以将具有临时密码的用户重定向到密码更改页面,而不是最初请求的页面。更改密码后,你可以使用SavedRequestAwareAuthenticationSuccessHandler,将用户重定向到最初请求的页面,这是默认的处理程序实现。
SavedRequestAwareAuthenticationSuccessHandler
public class MyHandler implements AuthenticationSuccessHandler { private AuthenticationSuccessHandler target = new SavedRequestAwareAuthenticationSuccessHandler(); public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth) { if (hasTemporaryPassword(auth)) { response.sendRedirect("/changePassword"); } else { target.onAuthenticationSuccess(request, response, auth); } } public void proceed(HttpServletRequest request, HttpServletResponse response, Authentication auth) { target.onAuthenticationSuccess(request, response, auth); } } @Controller("/changePassword") public class ChangePasswordController { @Autowired private MyHandler handler; @RequestMapping(method = POST) public void changePassword(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = "newPassword") String newPassword) { // handle password change ... // proceed to the secured page handler.proceed(request, response, auth); }