并发会话管理不起作用。我已经遵循了文档,但是我想我缺少了一些小东西

时间:2018-08-19 10:26:40

标签: java spring-boot session spring-security concurrency

这是我的安全配置

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/assets/**", "/register/**", "/","/login**")
            .permitAll().antMatchers("/profile/**").hasAuthority("ROLE_1").anyRequest().authenticated()
            .antMatchers("/actuator/**").hasAuthority("ROLE_2").anyRequest().authenticated()
            .and().formLogin().loginPage("/login").permitAll()
            .and().sessionManagement().maximumSessions(1).maxSessionsPreventsLogin(true).expiredUrl("/login?expired")
            .and().and().logout().deleteCookies("JSESSIONID").invalidateHttpSession(true)           
            .and().csrf().disable();
    // .failureUrl("/fail");
}

这是将HttpSessionEventPublisher添加到应用上下文中

@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
    return new HttpSessionEventPublisher();
}

请让我知道我在想什么。我仍然能够使用相同的凭据从两个浏览器登录。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。这是重写我的User类的equals和hashCode方法,该方法基于以下解决方案实现UserDetails。比较已验证主体的UserDetails对象是如何控制/衡量会话并发性

http://forum.spring.io/forum/spring-projects/security/99166-maximum-sessions-1-does-not-work

Spring Security maxSession doesn't work