描述:
项目背景:
遇到的问题:
要解决的问题:
PS:
我发现你到处问答,别人回答了也不知道正确还是错的,也不采纳。
我理解你的诉求应该是防止多人同时操作一个账号,出现这个问题的原因是因为缺少一个实时的session失效机制,因为直接关闭浏览器不会注销会话,所以服务器并不知道这个用户动作已经结束了,再次登录时会进行阻止。
解决方法可以增加心跳检测机制,比如用户登录后浏览器每隔1s给服务器发送心跳以维持会话,若服务器连续几个心跳周期都没有检测到心跳,则销毁相关会话,一定程度上可以解决这个问题。
spring security默认的行为是如果有第二个登陆的话,就把第一个登陆踢掉。所以不可能出现退出浏览器就不能登陆的问题。
你可以新建一个干净的工程,先确认一下默认行为:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().formLogin().permitAll();
http.sessionManagement().maximumSessions(1);
}
}
你现在的情况,很大可能是自己注入的stratedy或者handler造成的。先别进一步去改变框架的行为,先确定问题的根源吧。
既然楼上那么说了,我就来随便回答一下把