Commit 65ce1454 authored by weixsun's avatar weixsun Committed by Stephane Nicoll

Allow direct use of exposed WebSessionIdResolver bean

See gh-26437
parent c52eabae
...@@ -77,6 +77,7 @@ import org.springframework.web.server.i18n.FixedLocaleContextResolver; ...@@ -77,6 +77,7 @@ import org.springframework.web.server.i18n.FixedLocaleContextResolver;
import org.springframework.web.server.i18n.LocaleContextResolver; import org.springframework.web.server.i18n.LocaleContextResolver;
import org.springframework.web.server.session.CookieWebSessionIdResolver; import org.springframework.web.server.session.CookieWebSessionIdResolver;
import org.springframework.web.server.session.DefaultWebSessionManager; import org.springframework.web.server.session.DefaultWebSessionManager;
import org.springframework.web.server.session.WebSessionIdResolver;
import org.springframework.web.server.session.WebSessionManager; import org.springframework.web.server.session.WebSessionManager;
/** /**
...@@ -307,12 +308,16 @@ public class WebFluxAutoConfiguration { ...@@ -307,12 +308,16 @@ public class WebFluxAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean(name = WebHttpHandlerBuilder.WEB_SESSION_MANAGER_BEAN_NAME) @ConditionalOnMissingBean(name = WebHttpHandlerBuilder.WEB_SESSION_MANAGER_BEAN_NAME)
public WebSessionManager webSessionManager() { public WebSessionManager webSessionManager(ObjectProvider<WebSessionIdResolver> webSessionIdResolvers) {
DefaultWebSessionManager webSessionManager = new DefaultWebSessionManager(); DefaultWebSessionManager webSessionManager = new DefaultWebSessionManager();
CookieWebSessionIdResolver webSessionIdResolver = new CookieWebSessionIdResolver(); if (webSessionIdResolvers.getIfAvailable() != null) {
webSessionIdResolver.addCookieInitializer((cookie) -> cookie webSessionManager.setSessionIdResolver(webSessionIdResolvers.getIfAvailable());
return webSessionManager;
}
CookieWebSessionIdResolver cookieWebSessionIdResolver = new CookieWebSessionIdResolver();
cookieWebSessionIdResolver.addCookieInitializer((cookie) -> cookie
.sameSite(this.webFluxProperties.getSession().getCookie().getSameSite().attribute())); .sameSite(this.webFluxProperties.getSession().getCookie().getSameSite().attribute()));
webSessionManager.setSessionIdResolver(webSessionIdResolver); webSessionManager.setSessionIdResolver(cookieWebSessionIdResolver);
return webSessionManager; return webSessionManager;
} }
......
...@@ -87,6 +87,8 @@ import org.springframework.web.server.adapter.WebHttpHandlerBuilder; ...@@ -87,6 +87,8 @@ import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
import org.springframework.web.server.i18n.AcceptHeaderLocaleContextResolver; import org.springframework.web.server.i18n.AcceptHeaderLocaleContextResolver;
import org.springframework.web.server.i18n.FixedLocaleContextResolver; import org.springframework.web.server.i18n.FixedLocaleContextResolver;
import org.springframework.web.server.i18n.LocaleContextResolver; import org.springframework.web.server.i18n.LocaleContextResolver;
import org.springframework.web.server.session.CookieWebSessionIdResolver;
import org.springframework.web.server.session.WebSessionIdResolver;
import org.springframework.web.server.session.WebSessionManager; import org.springframework.web.server.session.WebSessionManager;
import org.springframework.web.util.pattern.PathPattern; import org.springframework.web.util.pattern.PathPattern;
...@@ -562,6 +564,19 @@ class WebFluxAutoConfigurationTests { ...@@ -562,6 +564,19 @@ class WebFluxAutoConfigurationTests {
HighPrecedenceConfigurer.class, WebFluxConfig.class, LowPrecedenceConfigurer.class)); HighPrecedenceConfigurer.class, WebFluxConfig.class, LowPrecedenceConfigurer.class));
} }
@Test
void customWebSessionIdResolverShouldBeApplied() {
this.contextRunner.withUserConfiguration(CustomWebSessionIdResolvers.class).run((context) -> {
MockServerHttpRequest request = MockServerHttpRequest.get("/").build();
MockServerWebExchange exchange = MockServerWebExchange.from(request);
WebSessionManager webSessionManager = context.getBean(WebSessionManager.class);
WebSession webSession = webSessionManager.getSession(exchange).block();
webSession.start();
exchange.getResponse().setComplete().block();
assertThat(exchange.getResponse().getCookies().get("JSESSIONID")).isNotEmpty();
});
}
@Test @Test
void customSameSteConfigurationShouldBeApplied() { void customSameSteConfigurationShouldBeApplied() {
this.contextRunner.withPropertyValues("spring.webflux.session.cookie.same-site:strict").run((context) -> { this.contextRunner.withPropertyValues("spring.webflux.session.cookie.same-site:strict").run((context) -> {
...@@ -584,6 +599,18 @@ class WebFluxAutoConfigurationTests { ...@@ -584,6 +599,18 @@ class WebFluxAutoConfigurationTests {
return Collections.emptyMap(); return Collections.emptyMap();
} }
@Configuration(proxyBeanMethods = false)
static class CustomWebSessionIdResolvers {
@Bean
WebSessionIdResolver webSessionIdResolver() {
CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
resolver.setCookieName("JSESSIONID");
return resolver;
}
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
static class CustomArgumentResolvers { static class CustomArgumentResolvers {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment