Изменение атрибута cookie сеанса samesite в приложении spring webflux

#spring-boot #cookies #session-cookies #spring-webflux

Вопрос:

Я пытаюсь изменить тот же атрибут сайта моего приложения springboot, используя WebSessionIdResolver , как описано здесь : 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;
    }
}
 

Я не понимаю, что происходит,при отладке я вижу инициализацию компонента, но при каждом вызове http файл cookie сеанса записывается с атрибутом SameSite по умолчанию «Lax», а значение по умолчанию CookieWebSessionIdResolver.cookieInitializer равно нулю.

Комментарии:

1. Это предназначено для использования Spring Session для записи своих файлов cookie, а не для Spring WebFlux для записи всех других файлов cookie.

2. Да, именно это я и пытаюсь сделать : изменить файл cookie весенней сессии.

3. Это не сработает с этим, так как это для весенней сессии, а не для весеннего веб-потока. Поэтому, если вы не используете весеннюю сессию вместе с Spring WebFlux, это не сработает.

4. ах, хорошо, мне просто нужно добавить весеннюю сессию в приложение pom.xml ? Или есть способ сделать это только с помощью webflux/spring security ?

5. Нет. Если вы не используете весеннюю сессию, эта конфигурация не будет работать. Я предлагаю вам прочитать о том, что такое Весенняя сессия (и вы, вероятно, не используете ее, о чем вам нужно спросить). Таким образом, эта конфигурация, ни добавление зависимости, не заставят ее работать. Вы должны настроить Spring WebFlux, а не весеннюю сессию. Вы делаете последнее и ожидаете, что оно будет работать для файлов cookie, написанных первым, это не сработает.

Ответ №1:

Я смог решить эту проблему, добавив зависимость «ядро весенней сессии» и используя следующую конфигурацию :

 @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<>());
    }
}