采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
配置.maximumSessions(1)后,并发控制仍不起作用,用两个浏览器测试,都可以正常访问接口,不知道什么原因
同问啊
不知道提问者这个问题解决没有,我同样遇到这个问题。下面说下我的解决办法,希望能帮助有同样问题的童鞋。
跟着代码一路debug,发现程序调用ConcurrentSessionControlAuthenticationStrategy里面onAuthentication方法时,方法内部的final List<SessionInformation> sessions = sessionRegistry.getAllSessions( authentication.getPrincipal(), false); sessions空。 跟进去看,SessionRegistryImpl的getAllSessions中直接是用认证过后的principal作为map key去查有无对应的session的。
问题就出在这个地方,把你的系统中自定义的principal的toString从写一下,换成如public String toString() { return this.username;} 这样principal作为key在map里就能找到有效期内重名的session记录。然后你定义的那个什么maximumSessions就能正常起作用了。
重写了怎么用起来?
到SessionManagementFilter和ConcurrentSessionControlAuthenticationStrategy里跟一下代码看看。
登录后可查看更多问答,登录/注册
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
2.2k 2
1.5k 1
2.7k 16
1.6k 14
5.8k 12