У меня есть реализация хранилища токенов JDB C по умолчанию с опцией "Запомнить меня". В течение долгого времени она успешно работала: у меня есть записи сессий в базе данных и "запомнить меня" Cook ie в браузере. Он успешно восстанавливал мой логин после открытия и закрытия моего браузера. Внезапно он перестал работать правильно, и я не знаю почему.
Симптом: он не восстанавливает сеанс и выдает запрос на вход в систему каждый раз, когда я закрываю браузер. Он по-прежнему записывает Cook ie и строки в базу данных, но записи базы данных для неполного пользователя больше не обновляются. Поэтому при каждом входе в систему с включенной опцией cc и «запомнить меня» создается новая запись.
Пожалуйста, помогите мне разобраться в этой ошибке. Моя конфигурация веб-безопасности прилагается ниже:
@Configuration
@EnableWebSecurity //Turns on Spring's web security component
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserService userService;
@Autowired
UserDetailsServiceImpl userDetailsService;
@Autowired
private DataSource dataSource;
@Bean
public BCryptPasswordEncoder passwordEncoder() {
//Password encoder settings to avoid storing plain passwords in DB
return new BCryptPasswordEncoder();
}
@Bean
public PersistentTokenRepository persistentTokenRepository() {
//Choose where to save user session: DB or memory (in our case: DB)
JdbcTokenRepositoryImpl db = new JdbcTokenRepositoryImplCust();
db.setDataSource(dataSource);
return db;
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
//Settings service to find User in DB + password
auth
.userDetailsService(userDetailsService)
.passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//Main method for Spring's web security
http
// URL checks
.authorizeRequests()
//.antMatchers("/xxx").permitAll() //All users can see it
.antMatchers("/resource/**").permitAll() //All users can see it
.antMatchers("/users").hasRole("ADMIN") //Only users with Admin Role can see it
.anyRequest().authenticated() //All another URL requires authorization
.and()
// Login forms
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/main")//Redirect page if
.failureUrl("/login?error")
.usernameParameter("username") //parse from POST
.passwordParameter("password") //parse from POST
.permitAll()
.and()
// Actions when logoff
.logout()
.permitAll() //разлогинится могут все
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true)
.and()
// Exceptions
.exceptionHandling()
.accessDeniedPage("/denied")
.and()
//Cookies
.rememberMe()
.tokenRepository(this.persistentTokenRepository()) //Chose sessions repository
.rememberMeParameter("remember-me")
//.alwaysRemember(true) - always remember ignoring checkbox
.tokenValiditySeconds(1 * 24 * 60 * 60) //24H
;
}
}
