我刚刚通过添加csrf标记为我的spring security(使用xml)启用了csrf令牌保护。
它工作得很好但我注意到当我点击登录表单时我发送了一个csrf令牌,在成功登录后csrf令牌仍然是相同的,无论如何我可以在登录表单后重置它吗?
检查文档后,我发现没有线索如何做到这一点,或者是否是我的存储库? (我没有使用任何自定义的csrf存储库)
想法?
答案 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配置中配置此处理程序。