Весна - не настойчиво запомни меня не выживает при перезапуске приложения - PullRequest
0 голосов
/ 28 ноября 2018

Я добавил функцию запомнить меня в приложение 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;
}

1 Ответ

0 голосов
/ 28 ноября 2018

Похоже, вы не настраиваете кнопку "запомнить меня" .Если этот параметр не установлен, Spring Security будет генерировать новый ключ при каждом запуске, что делает предыдущие файлы cookie, запоминаемые мной, недействительными.

.rememberMe()
    .key("mySecretKey")

(Замените "mySecretKey" случайной, но постоянной строкой.)

...