Я добавил функцию запомнить меня в приложение Spring Boot 2.Первоначально я добавил его, используя постоянный механизм, но заметил, что в постоянной таблице только одна строка для одного пользователя, поэтому он не будет работать, если вы войдете в два разных браузера.Это проблематично, потому что мы часто используем приложение для разработки и тестирования с одинаковыми учетными записями.
Поэтому я добавил опцию application.properties, чтобы включить постоянный механизм только в рабочей среде.Теперь с cookie только помните, что я работаю также в двух разных браузерах, но я заметил, что он не работает при перезапуске приложения.
Это ожидаемое поведение?Неужели нет способа, чтобы не переставать помнить меня при перезапуске сервера?
Это часть моей конфигурации:
@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;
}