Я пытался контролировать одновременных пользователей в весенней безопасности, которая реализована при весенней загрузке с сеансом Spring поверх Redis. Контроль параллелизма не работает. Попытался найти решение, но ни один из них не пригодился. Что-то не так в этом коде?
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
@EnableJpaRepositories(basePackageClasses = UsersRepository.class)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${user.max.sessions:1}")
int user_max_session;
@Bean
public HttpSessionStrategy httpSessionStrategy() {
return new HeaderHttpSessionStrategy();
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// https://www.baeldung.com/spring-security-session
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
http.cors().and().csrf().disable();
http.httpBasic().disable();
http.formLogin().disable();
http.logout().disable();
http.sessionManagement().maximumSessions(user_max_session)
.sessionRegistry(sessionRegistry()).and().sessionFixation().migrateSession();
}
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
@Bean
SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
}
user.max.sessions
настроен с одним. но, тем не менее, он допускает более 1 сеанса, и старый сеанс все еще действителен. Не удалось понять, как мы аннулируем old_sessions> max_users
Maven Зависимости:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>