Java 8 - spring 4.3.x
在配置spring security并启用csrf功能时,我遇到了CsrfTokenRepository
的两个实现,一个是Lazy,另一个是基于Cokkie的
我知道CookieCsrfTokenRepository
使用csrf令牌写入cookie并接受标头中的cookie值以验证有效请求
有人可以帮我理解LazyCsrfTokenRepository
的工作原理吗?
答案 0 :(得分:4)
来自javadoc:
CsrfTokenRepository
延迟保存新CsrfToken
直到。{ 访问生成的CsrfToken
的属性。
为什么会这样?在早期版本的Spring Security中,HttpSessionCsrfTokenRepository
是默认的。这样做的缺点是它总是创建一个令牌,触发会话创建,无论是否使用了令牌,这在某些应用程序中可能会浪费。
LazyCsrfTokenRepository
只创建一个包装器,只有在调用getToken()
时才会创建实际的令牌(比如生成表单时)。这可以避免不必要的会话创建。
LazyCsrfTokenRepository
的问题是,在HTTP响应提交之前,实际的令牌生成仍然必须发生,否则会出现异常。如果你遇到这个问题,最简单的方法是使用(仅)其他两个实现中的一个。