配置.maximumSessions(1)后,并发控制仍不起作用

来源:5-10 集群Session管理

sgpian

2018-04-29

配置.maximumSessions(1)后,并发控制仍不起作用,用两个浏览器测试,都可以正常访问接口,不知道什么原因

写回答

3回答

春生啊

2018-09-04

同问啊

1
0

melodykke

2018-11-21

不知道提问者这个问题解决没有,我同样遇到这个问题。下面说下我的解决办法,希望能帮助有同样问题的童鞋。

跟着代码一路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就能正常起作用了。


0
1
qq_昌记_04382570
重写了怎么用起来?
2020-02-19
共1条回复

JoJo

2018-05-03

到SessionManagementFilter和ConcurrentSessionControlAuthenticationStrategy里跟一下代码看看。

0
0

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程