我正在尝试实现一个管理员用户可以终止其他用户会话的功能。我在这里遵循官方的Spring Security文档:http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#list-authenticated-principals并开始通过sessionRegistry.getAllPrincipals()
获取所有当前登录的用户,但它总是返回一个空列表。
我在SessionRegistryImpl.registerNewSession()中设置了一个断点,并且可以看到它确实被调用了,它确实将UserDetails
(我自己的实现与equals()和hashCode()实现)添加到hashmap { {1}}。但是当我从Spring MVC控制器访问sessionRegistry bean时,列表始终为空。
我的配置与documentation几乎相同。
如何解决这个问题?有没有人成功让SessionRegistry与Spring Security 4合作?我记得我通过遵循这些说明(enter link description here)
使其与Spring Security 3一起工作答案 0 :(得分:1)
好的,所以我通过清理注释所建议的Spring配置文件来解决问题。有人搞砸了web.xml
- 他添加了对Spring DispatcherServlet
引用的上下文XML的引用,导致它被加载两次。他不知道,因为Spring隐含地引用了这个文件。
P.S。 我从中吸取了教训,但春天的人们可以做得更好(也许是在春季5?):