Spring - 不持久记住我在应用程序重启时不存在
Spring - Not persistent remember me does not survive at app restart
我在 Spring Boot 2 应用程序中添加了记住我的功能。最初我使用持久机制添加它,但我注意到一个用户在持久 table 上只有一行,所以如果你登录两个不同的浏览器它就不起作用。这是有问题的,因为我们经常使用该应用程序使用相同的帐户进行开发和测试。
所以我添加了一个 application.properties 选项来仅在生产中启用持久机制。现在使用 cookie only remember me 也可以在两个不同的浏览器上工作,但我注意到它在应用程序重新启动时不起作用。
这是预期的行为吗?有没有办法让服务器重启时不持久记住我?
这是我配置的一部分:
@Value("${remember_me.cookie_only}")
private boolean remember_me_cookie_only;
@Autowired
public DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers(...)
;
http.authorizeRequests().and().exceptionHandling().accessDeniedPage("/accessDenied");
http.authorizeRequests().and().formLogin()
// Submit URL of login page.
.loginProcessingUrl("/j_spring_security_check") // Submit URL
.loginPage("/loginMe")//
.defaultSuccessUrl("/loginOK",true)//
.failureUrl("/loginMe?error=true")//
.usernameParameter("username")//
.passwordParameter("password")
.failureHandler(customAuthenticationFailureHandler())
.and()
.rememberMe()
.rememberMeParameter("remember-me")
.rememberMeCookieName("remember-me")
.tokenValiditySeconds(24 * 60 * 60)
.and()
.logout()
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.logoutUrl("/logout")
.logoutSuccessUrl("/loginMe")
.logoutSuccessHandler(logoutSuccessHandler())
.and()
.sessionManagement()
.invalidSessionUrl("/timeout");
if (! remember_me_cookie_only) {
http.rememberMe().tokenRepository(persistentTokenRepository());
}
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
tokenRepository.setDataSource(dataSource);
return tokenRepository;
}
您似乎没有设置记住我密钥。如果未设置,Spring 安全将在每次启动时生成一个新密钥,使之前的记住我的 cookie 无效。
.rememberMe()
.key("mySecretKey")
(将 "mySecretKey"
替换为随机但持久的字符串。)
我在 Spring Boot 2 应用程序中添加了记住我的功能。最初我使用持久机制添加它,但我注意到一个用户在持久 table 上只有一行,所以如果你登录两个不同的浏览器它就不起作用。这是有问题的,因为我们经常使用该应用程序使用相同的帐户进行开发和测试。
所以我添加了一个 application.properties 选项来仅在生产中启用持久机制。现在使用 cookie only remember me 也可以在两个不同的浏览器上工作,但我注意到它在应用程序重新启动时不起作用。
这是预期的行为吗?有没有办法让服务器重启时不持久记住我?
这是我配置的一部分:
@Value("${remember_me.cookie_only}")
private boolean remember_me_cookie_only;
@Autowired
public DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers(...)
;
http.authorizeRequests().and().exceptionHandling().accessDeniedPage("/accessDenied");
http.authorizeRequests().and().formLogin()
// Submit URL of login page.
.loginProcessingUrl("/j_spring_security_check") // Submit URL
.loginPage("/loginMe")//
.defaultSuccessUrl("/loginOK",true)//
.failureUrl("/loginMe?error=true")//
.usernameParameter("username")//
.passwordParameter("password")
.failureHandler(customAuthenticationFailureHandler())
.and()
.rememberMe()
.rememberMeParameter("remember-me")
.rememberMeCookieName("remember-me")
.tokenValiditySeconds(24 * 60 * 60)
.and()
.logout()
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.logoutUrl("/logout")
.logoutSuccessUrl("/loginMe")
.logoutSuccessHandler(logoutSuccessHandler())
.and()
.sessionManagement()
.invalidSessionUrl("/timeout");
if (! remember_me_cookie_only) {
http.rememberMe().tokenRepository(persistentTokenRepository());
}
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
tokenRepository.setDataSource(dataSource);
return tokenRepository;
}
您似乎没有设置记住我密钥。如果未设置,Spring 安全将在每次启动时生成一个新密钥,使之前的记住我的 cookie 无效。
.rememberMe()
.key("mySecretKey")
(将 "mySecretKey"
替换为随机但持久的字符串。)