Spring Session с Redis - контроль параллелизма не работает - PullRequest
0 голосов
/ 11 марта 2020

Я пытался контролировать одновременных пользователей в весенней безопасности, которая реализована при весенней загрузке с сеансом 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>
...