我正在尝试使用非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