成功登录后有没有办法“重置”csrf令牌?

时间:2018-03-13 17:40:44

标签: spring spring-security

我刚刚通过添加csrf标记为我的spring security(使用xml)启用了csrf令牌保护。

它工作得很好但我注意到当我点击登录表单时我发送了一个csrf令牌,在成功登录后csrf令牌仍然是相同的,无论如何我可以在登录表单后重置它吗?

检查文档后,我发现没有线索如何做到这一点,或者是否是我的存储库? (我没有使用任何自定义的csrf存储库)

想法?

1 个答案:

答案 0 :(得分:0)

official documentation表示CSRF令牌默认存储在HttpSession中。由于令牌存储在会话中,因此在用户登录后它将继续被重用。

如果您确实想在成功登录时重置令牌,则必须处理成功的登录事件。

public class AuthenticationSuccessCsrfTokenResetHandler
             extends SimpleUrlAuthenticationSuccessHandler {
  private final CsrfTokenRepository repository;

  public AuthenticationSuccessCsrfTokenResetHandler(final CsrfTokenRepository repository) {
    this.repository = repository;
  }

  @Override
  public void onAuthenticationSuccess(final HttpServletRequest request
                                      , final HttpServletResponse response
                                      , final Authentication authentication)
                                      throws ServletException, IOException {
      repository.saveToken(repository.generateToken(request), request, response)
  }
}

然后,在Spring Security配置中配置此处理程序。