【问题标题】:Spring - Not persistent remember me does not survive at app restartSpring - 不持久记住我在应用程序重新启动时无法生存
【发布时间】:2019-04-30 09:43:27
【问题描述】:

我在我的 Spring Boot 2 应用程序中添加了记住我功能。最初我使用持久机制添加它,但我注意到持久表上只有一个用户的一行,所以如果您登录两个不同的浏览器,它就不起作用。这是有问题的,因为我们经常使用该应用程序使用相同的帐户进行开发和测试。

所以我添加了一个 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 spring-boot spring-security remember-me


【解决方案1】:

您似乎没有设置记住我的。如果未设置,Spring Security 将在每次启动时生成一个新密钥,使之前的 remember-me cookie 无效。

.rememberMe()
    .key("mySecretKey")

(将"mySecretKey" 替换为随机但持久的字符串。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多