• 主页
  • 无法使用maximumSessions和maxSessionsPreventsLogin在spring-boot中设置并发会话控制

无法使用maximumSessions和maxSessionsPreventsLogin在spring-boot中设置并发会话控制

我正在尝试使用非xml Spring Security建立并发会话控制,这样如果用户已经在另一个设备上登录,就不能登录。我用的是.sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true),但是用Chrome和Firefox我还是可以同时登录的。

我已经尝试按照another post的指示配置HttpSessionEventPublisher,但我仍然可以并发登录。

这是我的WebSecurityConfigurerAdapter

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private AccessDeniedHandler accessDeniedHandler;

    @Autowired 
    UsuarioRepository usuarioRepository;

    @Bean
    public UserDetailsService mongoUserDetails() {
       return new DinamicaUserDetailsService();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        UserDetailsService userDetailsService = mongoUserDetails();
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/", 
                             "/home", 
                             "/about", 
                             "/registro", 
                             "/session-error",
                             "/img/**",
                             "/img/*").permitAll()
                .antMatchers("/admin/**").hasAnyRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login?logout")
                .permitAll()
                .invalidateHttpSession(true)
                .and()
             .sessionManagement()
                .maximumSessions(1)
                .expiredUrl("/session-error")
                .maxSessionsPreventsLogin(true);
    }

}

如果我在登录Firefox的同时尝试登录Chrome,但第二次同时登录成功,我希望它会显示一个错误。

转载请注明出处:http://www.jxbyjx.net/article/20230510/1897418.html