我正在尝试使用非 xml Spring Security 建立并发会话控制,因此如果用户已经在另一台设备上登录,则他无法登录。我用过.sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true),但使用 Chrome 和 Firefox 我仍然可以同时登录。
我已尝试按照另一篇文章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,但第二次并发登录成功,我希望它会显示错误。
www说
相关分类