Skip to content

Commit b13f750

Browse files
DevDengChaoeleftherias
authored andcommitted
Retrieve remember-me key from service as fallback
Fixes: gh-4140
1 parent 4b4c6e6 commit b13f750

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/configurers/RememberMeConfigurer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,11 @@ private UserDetailsService getUserDetailsService(H http) {
435435
*/
436436
private String getKey() {
437437
if (this.key == null) {
438-
this.key = UUID.randomUUID().toString();
438+
if (this.rememberMeServices instanceof AbstractRememberMeServices) {
439+
this.key = ((AbstractRememberMeServices) rememberMeServices).getKey();
440+
} else {
441+
this.key = UUID.randomUUID().toString();
442+
}
439443
}
440444
return this.key;
441445
}

config/src/test/java/org/springframework/security/config/annotation/web/configurers/RememberMeConfigurerTests.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
3737
import org.springframework.security.web.authentication.RememberMeServices;
3838
import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter;
39+
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices;
3940
import org.springframework.test.web.servlet.MockMvc;
4041
import org.springframework.test.web.servlet.MvcResult;
4142

@@ -453,4 +454,36 @@ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
453454
// @formatter:on
454455
}
455456
}
457+
458+
@Test
459+
public void getWhenRememberMeCookieThenAuthenticationIsRememberMeAuthenticationTokenWithFallbackKeyConfiguration()
460+
throws Exception {
461+
this.spring.register(FallbackRememberMeKeyConfig.class).autowire();
462+
463+
MvcResult mvcResult = this.mvc.perform(post("/login")
464+
.with(csrf())
465+
.param("username", "user")
466+
.param("password", "password")
467+
.param("remember-me", "true"))
468+
.andReturn();
469+
Cookie rememberMeCookie = mvcResult.getResponse().getCookie("remember-me");
470+
471+
this.mvc.perform(get("/abc")
472+
.cookie(rememberMeCookie))
473+
.andExpect(authenticated().withAuthentication(auth ->
474+
assertThat(auth).isInstanceOf(RememberMeAuthenticationToken.class)));
475+
}
476+
477+
@EnableWebSecurity
478+
static class FallbackRememberMeKeyConfig extends RememberMeConfig {
479+
480+
@Override
481+
protected void configure(HttpSecurity http) throws Exception {
482+
super.configure(http);
483+
// @formatter:off
484+
http.rememberMe()
485+
.rememberMeServices(new TokenBasedRememberMeServices("key", userDetailsService()));
486+
// @formatter:on
487+
}
488+
}
456489
}

0 commit comments

Comments
 (0)