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