Spring Security 4 sessionRegistry不会填充Principal列表

时间:2015-06-25 12:09:20

标签: spring spring-security

我正在尝试实现一个管理员用户可以终止其他用户会话的功能。我在这里遵循官方的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一起工作

1 个答案:

答案 0 :(得分:1)

好的,所以我通过清理注释所建议的Spring配置文件来解决问题。有人搞砸了web.xml - 他添加了对Spring DispatcherServlet引用的上下文XML的引用,导致它被加载两次。他不知道,因为Spring隐含地引用了这个文件。

P.S。 我从中吸取了教训,但春天的人们可以做得更好(也许是在春季5?):

  1. 不应该有隐式上下文文件加载。目前,该框架将尝试从位于应用程序的WebContent / WEB-INF目录中的名为[servlet-name] -servlet.xml的文件加载应用程序上下文。在这种情况下,约定优于配置。
  2. 当bean加载两次时应该有警告,如果有人需要覆盖bean定义,他必须明确声明。否则,需要花费大量时间来调试此错误会导致的错误。