CRSF LazyCsrfTokenRepository如何工作?

时间:2018-03-01 19:10:42

标签: spring spring-security csrf csrf-protection

Java 8 - spring 4.3.x

在配置spring security并启用csrf功能时,我遇到了CsrfTokenRepository的两个实现,一个是Lazy,另一个是基于Cokkie的

我知道CookieCsrfTokenRepository使用csrf令牌写入cookie并接受标头中的cookie值以验证有效请求

有人可以帮我理解LazyCsrfTokenRepository的工作原理吗?

1 个答案:

答案 0 :(得分:4)

来自javadoc

  

CsrfTokenRepository延迟保存新CsrfToken直到。{   访问生成的CsrfToken的属性。

为什么会这样?在早期版本的Spring Security中,HttpSessionCsrfTokenRepository是默认的。这样做的缺点是它总是创建一个令牌,触发会话创建,无论是否使用了令牌,这在某些应用程序中可能会浪费。

另一方面,LazyCsrfTokenRepository只创建一个包装器,只有在调用getToken()时才会创建实际的令牌(比如生成表单时)。这可以避免不必要的会话创建。

LazyCsrfTokenRepository的问题是,在HTTP响应提交之前,实际的令牌生成仍然必须发生,否则会出现异常。如果你遇到这个问题,最简单的方法是使用(仅)其他两个实现中的一个。