使用redis限制Spring Boot中的会话

问题描述 投票:0回答:1

我使用 Spring boot 和 Redis 来验证用户身份。

我的应用程序首次使用用户名和密码对用户进行身份验证,并发回唯一的令牌。对于进一步的交易,用户在标头中发送令牌。

这很好用,但是当用户已经通过身份验证并且在 Redis 中拥有令牌时,我不希望 spring 创建新令牌。

设置:Spring Boot:1.4.0; Java 1.8

我确实尝试了以下方法,但它不起作用。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter 
{   
  @Autowired
  private CustomAuthenticationProvider authProvider;

  @Bean
  public HttpSessionStrategy httpSessionStrategy() 
  {
     return new HeaderHttpSessionStrategy();
  }

   @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
  {
     auth.authenticationProvider(authProvider);
  }

  @Override
  protected void configure(HttpSecurity http) throws Exception 
  {
    http
        .authorizeRequests()
        .anyRequest().authenticated()                       
        .and()
        .requestCache()
        .requestCache(new NullRequestCache())
        .and()
        .httpBasic()
        .and()
        .sessionManagement()
        .maximumSessions(1)
        .maxSessionsPreventsLogin(true)
        .sessionRegistry(sessionRegistry());
  }


  @Bean
  public SessionRegistry sessionRegistry() 
  {
     SessionRegistry sessionRegistry = new SessionRegistryImpl();
     return sessionRegistry;
  }

  @Bean
  public static HttpSessionEventPublisher httpSessionEventPublisher() 
  {
     return new HttpSessionEventPublisher();
  }   
}
java spring spring-boot spring-security
1个回答
1
投票
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Autowired
        FindByIndexNameSessionRepository<ExpiringSession> sessionRepository;

        @Override
        protected void configure(HttpSecurity http) throws Exception {
                http
                        // other config goes here...
                        .sessionManagement()
                                .maximumSessions(1)
                                .sessionRegistry(sessionRegistry());
        }

        @Bean
        SpringSessionBackedSessionRegistry sessionRegistry() {
                return new SpringSessionBackedSessionRegistry(this.sessionRepository);
        }
}

更多详情请参阅这里

© www.soinside.com 2019 - 2024. All rights reserved.