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