【问题标题】:Changing the samesite session cookie attribute in a spring webflux application在 spring webflux 应用程序中更改相同站点会话 cookie 属性
【发布时间】:2021-08-31 23:31:13
【问题描述】:

我正在尝试使用WebSessionIdResolver 更改我的 springboot 应用程序的相同站点属性,如下所述:https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-webflux-custom-cookie.html

@Configuration
public class CookieConfiguration {
    @Bean
    public WebSessionIdResolver webSessionIdResolver() {
        CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
        resolver.addCookieInitializer(builder -> builder.sameSite("None"));
        return resolver;
    }
}

我不明白发生了什么,在调试时我可以看到 bean 正在初始化,但是在每个 http 调用中,都会使用默认的 sameSite 属性“Lax”写入会话 cookie,并且默认的 CookieWebSessionIdResolver.cookieInitializer 为空。

【问题讨论】:

  • 这是为了使用 Spring Session 编写它的 cookie,而不是 Spring WebFlux 编写所有其他 cookie。
  • 是的,这就是我想要做的:更改春季会话 cookie。
  • 这不适用于 Spring Session not Spring WebFlux。因此,除非您将 Spring Session 与 Spring WebFlux 一起使用,否则这是行不通的。
  • 啊好吧,我只需要将 spring 会话添加到应用程序 pom.xml 吗?或者有没有办法只使用 webflux/spring 安全性来做到这一点?
  • 没有。如果您不使用 Spring Session,则此配置将不起作用。我建议您阅读 Spring Session 是什么(您可能没有使用它,您需要询问)。所以这个配置,也没有添加依赖,将使它工作。您必须配置 Spring WebFlux not Spring Session。您正在执行后者,并希望它适用于前者编写的 cookie,但这是行不通的。

标签: spring-boot cookies session-cookies spring-webflux


【解决方案1】:

我能够通过添加“spring-session-core”依赖项并使用以下配置来解决这个问题:

@EnableSpringWebSession
@Configuration
public class CookieConfiguration {
    @Bean
    public WebSessionIdResolver webSessionIdResolver() {
        CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
        resolver.addCookieInitializer(builder -> builder.sameSite("None"));
        return resolver;
    }

    @Bean
    public ReactiveMapSessionRepository reactiveSessionRepository() {
        return new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
    }
}

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2017-08-17
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2016-12-21
    相关资源
    最近更新 更多