代码之家  ›  专栏  ›  技术社区  ›  Marco Sulla

Spring-不持久记住我在应用程序重启时无法生存

  •  0
  • Marco Sulla  · 技术社区  · 6 年前

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

    因此,我添加了application.properties选项,以便仅在生产环境中启用持久化机制。现在使用cookie only Memory 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;
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   holmis83    6 年前

    看来你不是在开玩笑,记得我吗 钥匙

    .rememberMe()
        .key("mySecretKey")
    

    (替换 "mySecretKey"