CRSF LazyCsrfTokenRepository如何工作?

问题描述 投票:1回答:1

Java 8 - spring 4.3.x

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

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

有人能帮我理解LazyCsrfTokenRepository是如何工作的吗?

spring spring-security csrf csrf-protection
1个回答
4
投票

来自javadoc

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.