我的安全配置包含以下行:
...csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())...
它会在每个请求中发送一个csrf cookie给客户端。这个cookie没有设置same-site属性。是否也可以添加same-site属性?我查看了该类中的一些方法,并没有发现额外的属性。
如何才能做到这一点?
我的安全配置包含以下行:
...csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())...
它会在每个请求中发送一个csrf cookie给客户端。这个cookie没有设置same-site属性。是否也可以添加same-site属性?我查看了该类中的一些方法,并没有发现额外的属性。
如何才能做到这一点?
3条答案
按热度按时间au9on6nz1#
不幸的是,从4.0.1版开始,
servlet-api
不允许你在Cookie
中添加Same-Site
属性,希望这一点很快会改变。但同时,您可以提供自己的
CsrfTokenRepository
实现,直接在HTTP头中设置cookie,而不是将Cookie
添加到HttpServletResponse
(因此受到servlet-api的cookie表示的限制):您可以查看
CookieCsrfTokenRepository
以填补空白。p1tboqfb2#
顺便说一句,按照NatFars的回答,这个解决方案在Kotlin中特别简单,在Kotlin中,你可以委托给其他对象,而不必以黑客的方式从原始对象复制代码:
关于在Kotlin的授权:https://kotlinlang.org/docs/reference/delegation.html
nr9pn0ug3#
从Spring-Security 6.1开始就有了方法
setCookieCustomizer(Consumer<ResponseCookie.ResponseCookieBuilder> cookieCustomizer)
它允许注册一个定制器,如: