Весенняя охрана: «запомни меня» внезапно нарушается - PullRequest
0 голосов
/ 10 марта 2020

У меня есть реализация хранилища токенов 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
            ;
    }
}

DB Screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...