Skip to content

Commit d65d951

Browse files
committed
Polish "Add support for customizing Spring Session's cookie serializer"
See gh-20961
1 parent 32454b8 commit d65d951

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

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

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,9 @@ DefaultCookieSerializer cookieSerializer(ServerProperties serverProperties,
110110
static class RememberMeServicesConfiguration {
111111

112112
@Bean
113-
RememberMeServicesCookieSerializerCustomizer rememberMeServicesCookieSerializerCustomizer() {
114-
return new RememberMeServicesCookieSerializerCustomizer();
113+
CookieSerializerCustomizer rememberMeServicesCookieSerializerCustomizer() {
114+
return (cookieSerializer) -> cookieSerializer
115+
.setRememberMeRequestAttribute(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR);
115116
}
116117

117118
}
@@ -141,19 +142,6 @@ static class ReactiveSessionRepositoryConfiguration {
141142

142143
}
143144

144-
/**
145-
* Customization for {@link SpringSessionRememberMeServices} that is only instantiated
146-
* when Spring Security is on the classpath.
147-
*/
148-
static class RememberMeServicesCookieSerializerCustomizer implements CookieSerializerCustomizer {
149-
150-
@Override
151-
public void customize(DefaultCookieSerializer cookieSerializer) {
152-
cookieSerializer.setRememberMeRequestAttribute(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR);
153-
}
154-
155-
}
156-
157145
/**
158146
* Condition to trigger the creation of a {@link DefaultCookieSerializer}. This kicks
159147
* in if either no {@link HttpSessionIdResolver} and {@link CookieSerializer} beans

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import javax.servlet.DispatcherType;
2323

2424
import org.junit.jupiter.api.Test;
25+
import org.mockito.InOrder;
2526

2627
import org.springframework.boot.autoconfigure.AutoConfigurations;
2728
import org.springframework.boot.autoconfigure.web.ServerProperties;
@@ -30,6 +31,7 @@
3031
import org.springframework.boot.web.servlet.FilterRegistrationBean;
3132
import org.springframework.context.annotation.Bean;
3233
import org.springframework.context.annotation.Configuration;
34+
import org.springframework.core.annotation.Order;
3335
import org.springframework.session.MapSessionRepository;
3436
import org.springframework.session.SessionRepository;
3537
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
@@ -42,6 +44,8 @@
4244
import org.springframework.test.util.ReflectionTestUtils;
4345

4446
import static org.assertj.core.api.Assertions.assertThat;
47+
import static org.mockito.ArgumentMatchers.any;
48+
import static org.mockito.Mockito.inOrder;
4549
import static org.mockito.Mockito.mock;
4650

4751
/**
@@ -205,6 +209,16 @@ void autoConfiguredCookieSerializerIsConfiguredWithRememberMeRequestAttribute()
205209
});
206210
}
207211

212+
@Test
213+
void cookieSerializerCustomization() {
214+
this.contextRunner.withBean(CookieSerializerCustomization.class).run((context) -> {
215+
CookieSerializerCustomization customization = context.getBean(CookieSerializerCustomization.class);
216+
InOrder inOrder = inOrder(customization.customizer1, customization.customizer2);
217+
inOrder.verify(customization.customizer1).customize(any());
218+
inOrder.verify(customization.customizer2).customize(any());
219+
});
220+
}
221+
208222
@Configuration(proxyBeanMethods = false)
209223
@EnableSpringHttpSession
210224
static class SessionRepositoryConfiguration {
@@ -276,4 +290,26 @@ SpringSessionRememberMeServices rememberMeServices() {
276290

277291
}
278292

293+
@Configuration(proxyBeanMethods = false)
294+
@EnableSpringHttpSession
295+
static class CookieSerializerCustomization extends SessionRepositoryConfiguration {
296+
297+
private final CookieSerializerCustomizer customizer1 = mock(CookieSerializerCustomizer.class);
298+
299+
private final CookieSerializerCustomizer customizer2 = mock(CookieSerializerCustomizer.class);
300+
301+
@Bean
302+
@Order(1)
303+
CookieSerializerCustomizer customizer1() {
304+
return this.customizer1;
305+
}
306+
307+
@Bean
308+
@Order(2)
309+
CookieSerializerCustomizer customizer2() {
310+
return this.customizer2;
311+
}
312+
313+
}
314+
279315
}

0 commit comments

Comments
 (0)