Skip to content

Commit 9553d4f

Browse files
committed
Polish "Auto-configure Spring Session's cookie serializer"
Closes gh-15163
1 parent 0daf83e commit 9553d4f

File tree

2 files changed

+25
-42
lines changed

2 files changed

+25
-42
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,11 @@ public class SessionAutoConfiguration {
8989
SessionRepositoryFilterConfiguration.class })
9090
static class ServletSessionConfiguration {
9191

92-
private final ServerProperties serverProperties;
93-
94-
ServletSessionConfiguration(ServerProperties serverProperties) {
95-
this.serverProperties = serverProperties;
96-
}
97-
9892
@Bean
9993
@Conditional(DefaultCookieSerializerCondition.class)
100-
public DefaultCookieSerializer cookieSerializer() {
101-
Cookie cookie = this.serverProperties.getServlet().getSession().getCookie();
94+
public DefaultCookieSerializer cookieSerializer(
95+
ServerProperties serverProperties) {
96+
Cookie cookie = serverProperties.getServlet().getSession().getCookie();
10297
DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
10398
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
10499
map.from(cookie::getName).to(cookieSerializer::setCookieName);

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationTests.java

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@
2626

2727
import org.springframework.boot.autoconfigure.AutoConfigurations;
2828
import org.springframework.boot.autoconfigure.web.ServerProperties;
29-
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
3029
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3130
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
3231
import org.springframework.boot.web.servlet.FilterRegistrationBean;
33-
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
3432
import org.springframework.context.annotation.Bean;
3533
import org.springframework.context.annotation.Configuration;
3634
import org.springframework.session.MapSessionRepository;
@@ -168,29 +166,7 @@ public void filterDispatcherTypesCanBeCustomized() {
168166
}
169167

170168
@Test
171-
public void sessionCookieConfigurationIsPickedUp() {
172-
WebApplicationContextRunner webRunner = new WebApplicationContextRunner(
173-
AnnotationConfigServletWebServerApplicationContext::new)
174-
.withConfiguration(AutoConfigurations
175-
.of(ServletWebServerFactoryAutoConfiguration.class))
176-
.withUserConfiguration(SessionRepositoryConfiguration.class)
177-
.withPropertyValues("server.port=0",
178-
"server.servlet.session.cookie.name=testname");
179-
webRunner.run((context) -> {
180-
SessionRepositoryFilter<?> filter = context
181-
.getBean(SessionRepositoryFilter.class);
182-
CookieHttpSessionIdResolver sessionIdResolver = (CookieHttpSessionIdResolver) ReflectionTestUtils
183-
.getField(filter, "httpSessionIdResolver");
184-
DefaultCookieSerializer cookieSerializer = (DefaultCookieSerializer) ReflectionTestUtils
185-
.getField(sessionIdResolver, "cookieSerializer");
186-
String cookieName = (String) ReflectionTestUtils.getField(cookieSerializer,
187-
"cookieName");
188-
assertThat(cookieName).isEqualTo("testname");
189-
});
190-
}
191-
192-
@Test
193-
public void autoConfiguredCookieSerializerConfiguration() {
169+
public void sessionCookieConfigurationIsAppliedToAutoConfiguredCookieSerializer() {
194170
this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
195171
.withPropertyValues("server.servlet.session.cookie.name=sid",
196172
"server.servlet.session.cookie.domain=spring",
@@ -217,20 +193,32 @@ public void autoConfiguredCookieSerializerConfiguration() {
217193
}
218194

219195
@Test
220-
public void userProvidedCookieSerializerConfiguration() {
196+
public void autoConfiguredCookieSerializerIsUsedBySessionRepositoryFilter() {
197+
this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
198+
.withPropertyValues("server.port=0").run((context) -> {
199+
SessionRepositoryFilter<?> filter = context
200+
.getBean(SessionRepositoryFilter.class);
201+
CookieHttpSessionIdResolver sessionIdResolver = (CookieHttpSessionIdResolver) ReflectionTestUtils
202+
.getField(filter, "httpSessionIdResolver");
203+
DefaultCookieSerializer cookieSerializer = (DefaultCookieSerializer) ReflectionTestUtils
204+
.getField(sessionIdResolver, "cookieSerializer");
205+
assertThat(cookieSerializer)
206+
.isSameAs(context.getBean(DefaultCookieSerializer.class));
207+
});
208+
}
209+
210+
@Test
211+
public void autoConfiguredCookieSerializerBacksOffWhenUserConfiguresACookieSerializer() {
221212
this.contextRunner
222213
.withUserConfiguration(UserProvidedCookieSerializerConfiguration.class)
223-
.withPropertyValues("server.servlet.session.cookie.name=sid")
224214
.run((context) -> {
225-
DefaultCookieSerializer cookieSerializer = context
226-
.getBean(DefaultCookieSerializer.class);
227-
assertThat(cookieSerializer).hasFieldOrPropertyWithValue("cookieName",
228-
"SESSION");
215+
assertThat(context).hasSingleBean(DefaultCookieSerializer.class);
216+
assertThat(context).hasBean("myCookieSerializer");
229217
});
230218
}
231219

232220
@Test
233-
public void userProvidedCookieHttpSessionStrategyConfiguration() {
221+
public void cookiesSerializerIsAutoConfiguredWhenUserConfiguresCookieHttpSessionIdResolver() {
234222
this.contextRunner
235223
.withUserConfiguration(
236224
UserProvidedCookieHttpSessionStrategyConfiguration.class)
@@ -240,7 +228,7 @@ public void userProvidedCookieHttpSessionStrategyConfiguration() {
240228
}
241229

242230
@Test
243-
public void userProvidedHeaderHttpSessionStrategyConfiguration() {
231+
public void autoConfiguredCookieSerializerBacksOffWhenUserConfiguresHeaderHttpSessionIdResolver() {
244232
this.contextRunner
245233
.withUserConfiguration(
246234
UserProvidedHeaderHttpSessionStrategyConfiguration.class)
@@ -249,7 +237,7 @@ public void userProvidedHeaderHttpSessionStrategyConfiguration() {
249237
}
250238

251239
@Test
252-
public void userProvidedCustomHttpSessionStrategyConfiguration() {
240+
public void autoConfiguredCookieSerializerBacksOffWhenUserConfiguresCustomHttpSessionIdResolver() {
253241
this.contextRunner
254242
.withUserConfiguration(
255243
UserProvidedCustomHttpSessionStrategyConfiguration.class)

0 commit comments

Comments
 (0)