2828import java .util .Locale ;
2929import java .util .Map ;
3030import java .util .concurrent .TimeUnit ;
31+ import java .util .function .Consumer ;
3132
3233import javax .validation .ValidatorFactory ;
3334
4041import org .springframework .boot .autoconfigure .validation .ValidationAutoConfiguration ;
4142import org .springframework .boot .autoconfigure .validation .ValidatorAdapter ;
4243import org .springframework .boot .autoconfigure .web .reactive .WebFluxAutoConfiguration .WebFluxConfig ;
44+ import org .springframework .boot .test .context .runner .ContextConsumer ;
4345import org .springframework .boot .test .context .runner .ReactiveWebApplicationContextRunner ;
4446import org .springframework .boot .web .codec .CodecCustomizer ;
47+ import org .springframework .boot .web .reactive .context .ReactiveWebApplicationContext ;
4548import org .springframework .boot .web .reactive .filter .OrderedHiddenHttpMethodFilter ;
4649import org .springframework .context .ApplicationContext ;
4750import org .springframework .context .annotation .Bean ;
8790import org .springframework .web .server .i18n .AcceptHeaderLocaleContextResolver ;
8891import org .springframework .web .server .i18n .FixedLocaleContextResolver ;
8992import org .springframework .web .server .i18n .LocaleContextResolver ;
93+ import org .springframework .web .server .session .CookieWebSessionIdResolver ;
94+ import org .springframework .web .server .session .WebSessionIdResolver ;
9095import org .springframework .web .server .session .WebSessionManager ;
9196import org .springframework .web .util .pattern .PathPattern ;
9297
@@ -563,17 +568,29 @@ void userConfigurersCanBeOrderedBeforeOrAfterTheAutoConfiguredConfigurer() {
563568 }
564569
565570 @ Test
566- void customSameSteConfigurationShouldBeApplied () {
567- this .contextRunner .withPropertyValues ("spring.webflux.session.cookie.same-site:strict" ).run ((context ) -> {
571+ void customWebSessionIdResolverShouldBeApplied () {
572+ this .contextRunner .withUserConfiguration (CustomWebSessionIdResolver .class ).run (assertExchangeWithSession (
573+ (exchange ) -> assertThat (exchange .getResponse ().getCookies ().get ("TEST" )).isNotEmpty ()));
574+ }
575+
576+ @ Test
577+ void customSameSiteConfigurationShouldBeApplied () {
578+ this .contextRunner .withPropertyValues ("spring.webflux.session.cookie.same-site:strict" ).run (
579+ assertExchangeWithSession ((exchange ) -> assertThat (exchange .getResponse ().getCookies ().get ("SESSION" ))
580+ .isNotEmpty ().allMatch ((cookie ) -> cookie .getSameSite ().equals ("Strict" ))));
581+ }
582+
583+ private ContextConsumer <ReactiveWebApplicationContext > assertExchangeWithSession (
584+ Consumer <MockServerWebExchange > exchange ) {
585+ return (context ) -> {
568586 MockServerHttpRequest request = MockServerHttpRequest .get ("/" ).build ();
569- MockServerWebExchange exchange = MockServerWebExchange .from (request );
587+ MockServerWebExchange webExchange = MockServerWebExchange .from (request );
570588 WebSessionManager webSessionManager = context .getBean (WebSessionManager .class );
571- WebSession webSession = webSessionManager .getSession (exchange ).block ();
589+ WebSession webSession = webSessionManager .getSession (webExchange ).block ();
572590 webSession .start ();
573- exchange .getResponse ().setComplete ().block ();
574- assertThat (exchange .getResponse ().getCookies ().get ("SESSION" )).isNotEmpty ()
575- .allMatch ((cookie ) -> cookie .getSameSite ().equals ("Strict" ));
576- });
591+ webExchange .getResponse ().setComplete ().block ();
592+ exchange .accept (webExchange );
593+ };
577594 }
578595
579596 private Map <PathPattern , Object > getHandlerMap (ApplicationContext context ) {
@@ -584,6 +601,18 @@ private Map<PathPattern, Object> getHandlerMap(ApplicationContext context) {
584601 return Collections .emptyMap ();
585602 }
586603
604+ @ Configuration (proxyBeanMethods = false )
605+ static class CustomWebSessionIdResolver {
606+
607+ @ Bean
608+ WebSessionIdResolver webSessionIdResolver () {
609+ CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver ();
610+ resolver .setCookieName ("TEST" );
611+ return resolver ;
612+ }
613+
614+ }
615+
587616 @ Configuration (proxyBeanMethods = false )
588617 static class CustomArgumentResolvers {
589618
0 commit comments