获取 Spring Security 中所有已登录的用户

2024-03-11

我想获取当前登录我的应用程序的所有用户的列表。我知道,我应该注射SessionRegistry在我的代码中调用getAllPrincipals()方法。不幸的是,我总是得到空列表。看起来SessionRegistry没有填充,我不知道如何制作它。我知道,StackOverflow 上也有类似的问题,但我仍然无法解决我的问题。首先,我将以下代码添加到我的 web.xml 中:

<listener>
    <listener-class>
        org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
</listener>

据我所知,它允许获取有关会话生命周期(创建、销毁)的信息。就这样。我在前进方面遇到了很大的问题。我的安全 bean 文件如下所示:

<beans:bean id="successAuth" class="pl.fp.microblog.auth.SuccessAuth"/>
<beans:bean id="failureAuth" class="pl.fp.microblog.auth.FailureAuth"/>

<http auto-config="true">
    <intercept-url pattern="/" access="ROLE_USER" />
    <intercept-url pattern="/profile/*" access="ROLE_USER" />
    <form-login 
        login-page="/login"         
        authentication-success-handler-ref="successAuth"
        authentication-failure-handler-ref="failureAuth"
        username-parameter="username"
        password-parameter="password"           
        login-processing-url="/login_processing_url"
    />          
    <security:logout logout-url="/logout_processing_url"/>  
    <session-management>
        <concurrency-control max-sessions="1" session-registry-alias="sessionRegistry"/>
    </session-management>
</http>

<beans:bean id="saltProvider" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
    <beans:property name="userPropertyToUse" value="username"></beans:property>
</beans:bean>

<beans:bean id="userService" class="pl.fp.microblog.auth.UserService">
    <beans:property name="userDAO" ref="userDAO"/>
</beans:bean>

<authentication-manager>
    <security:authentication-provider user-service-ref="userService">
        <password-encoder hash="sha-256">
            <security:salt-source ref="saltProvider"/>
        </password-encoder>         
    </security:authentication-provider>
</authentication-manager>

这里我调用 getAllPrinciples() 方法:

@Transactional
@Controller
public class SiteController {
    @Autowired
    private UserDAO userDAO;
    @Autowired
    private SessionRegistry sessionRegistry;    

    @RequestMapping(value = "profile/{login}")  
    public String profilePage(@PathVariable String login, HttpServletRequest req) throws SQLException {     
        ...
        sessionRegistry.getAllPrincipals().size()
        ...     
        return "profile";               
    }
}

我尝试添加session-managemenent代码到我的http, ConcurrentSessionFilter和类似的事情,但实际上我不明白。而且文档对我来说太复杂了。有谁可以帮助我并逐步告诉我下一步该怎么做?我应该添加哪些豆子?


我想你已经快到了。您可能错过的唯一一件事是使用session-registry-alias。通过在concurrency-control元素公开会话注册表,以便可以将其注入到您自己的 bean 中。请参阅参考文档 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/appendix-namespace.html#nsa-concurrency-control.

所以你需要的是:

<http auto-config="true">
...
    <session-management>
        <concurrency-control max-sessions="1" session-registry-alias="sessionRegistry"/>
    </session-management>
</http>

现在您已经有了对会话注册表的引用,该注册表将由ConcurrentSessionControlStrategy这是由上述配置隐式设置的。要使用它,你只需像平常一样将它注入到你的 bean 中:

<bean class="YourOwnSessionRegistryAwareBean">
    <property sessionRegistry="sessionRegistry"/>
</bean>

请注意,上述配置还将限制用户可能拥有的并发会话数。如果你不想要这个限制,你将不得不放弃命名空间配置的便利,因为命名空间模式不允许你设置max-sessions属性为-1。如果您需要有关如何手动连接必要的 bean 的帮助,参考文档给出了详细说明 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/session-mgmt.html#concurrent-sessions.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 Spring Security 中所有已登录的用户 的相关文章

随机推荐

  • 垂直 ViewPager2 与 RecyclerView 滚动问题

    我使用的是 ViewPager2 它有两个垂直方向的片段 当用户向下滑动到第二个片段时 有一个 RecyclerView 以相同的垂直方向滚动内容 问题是当我滚动 RecyclerView 的内容时 有时 ViewPager2 捕获滚动事件
  • 如何将 unicode 字符变成小写字母

    我在 VC MFC 中将 unicode 字符转换为小写字母时遇到问题 我在 CString 变量中有 unicode 字符 所以 使用英语 MakeLower 工作正常 我得到小写字母 但它无法将 unicode 字符转换为小写 我确实尝
  • 如何获得whenComplete和thenCompose的组合效果?

    我试图想出一个具有以下综合效果的 CompletableFuturewhenComplete and thenCompose 具体来说 返回一个CompletionStage而不仅仅是结果 类似于thenCompose 即使前一阶段异常完成
  • 我的程序在打开该活动时给出“应用程序不断停止”的错误是什么?

    应用程序正常打开 但在打开此活动时显示 应用程序不断停止 我不明白有什么问题 也许API级别与calendar get 不兼容 如果是这样我该如何修复它 public class SearchRide extends AppCompatAc
  • PHPUnit生成的测试骨架路径

    是否可以通过 sculpture test 命令告诉 phpunit 将生成的测试框架文件放在哪里 甚至可以告诉 phpunit 重复目录结构吗 以免说我有用于测试的文件lib model SomeClass php我希望 phpstorm
  • 立即在 Android 上显示自动完成功能

    Android 自动完成功能仅在两个字母后启动 如何才能在刚刚选择字段时显示列表 要使自动完成功能在焦点上显示 请添加焦点侦听器并在字段获得焦点时显示下拉菜单 如下所示 editText setOnFocusChangeListener n
  • 使用 HtmlService 在 google apps 脚本中保存状态的位置

    我有以下发布的网络应用程序code gs var queryString function doGet e queryString e queryString logger only works if the return value is
  • 使用 NancyFX 进行模型验证

    我真的很习惯 ASP NET MVC 方法 用相应的属性注释模型 MVC 验证它并更新 ModelState Errors ModelState 在视图上可用 因此可以向用户显示错误 我还没有找到相关信息wiki https github
  • msxml3.dll错误'80072ee2'操作超时

    我有一个经典的 ASP 页面 它读取外部 rss 提要 xml 文档 然后将其显示在网页上 在我的网站转移到新服务器之前 这一切都工作正常 我认为现在是 Windows 2008 我的脚本现在超时了 我认为问题实际上并不是因为我增加了超时值
  • 如何从字符串中删除变音符号(变音符号)?

    如何转换字符串 例如P li lu ou k k p l belsk dy into Prilis zlutoucky kun upel dabelske ody 源字符串采用 Unicode 因此原则上应该可以使用规范化 分解来分隔元音变
  • 如何查看 SQL 2008 锁和阻塞表

    在我的应用程序的 ASP NET 执行期间 SQL 2008 Express 似乎持有一些锁定 我得到 Timeout expired The timeout period elapsed prior to completion of 操作
  • 为什么 Java 类型擦除没有阻止此代码编译

    我有一个类定义了以下两种方法 public Map
  • 如何让 scalac 告诉我是否有未使用的变量?

    我刚刚注意到代码中的一个错误 我创建了一个新变量 但后来未能实际使用它 我以为 scalac 会告诉我我的新变量未被使用 但情况似乎并非如此 在进行少量谷歌搜索 手册页后 我找不到任何有关启用警告的信息 我该怎么做才能启用此类警告 这个东西
  • 使用Javascript读取外部文件

    我有一个可变长度名称的外部文本文件配置文件 txt包含以下格式的信息 Jason Red Tyrannosaurus Zack Black Mastodon Billy Blue Triceratops Trini Yellow Griff
  • 如何手动刷新升压日志?

    我正在使用 boost 1 54 0 中的 Boost Log 看看它是否适合我的应用程序 一般来说 我的缓冲没有问题 所以我不想打开 auto flush 或任何东西 但我注意到在我调用之前记录的消息fork 是重复的 我想知道是否是因为
  • 如何使用 Pyomo 制作指标函数?

    我正在寻找在 Pyomo 中创建一个简单的指示变量 假设我有一个变量 x 如果 x gt 0 则该指示函数将取值 1 否则取 0 我尝试这样做的方法如下 model ConcreteModel model A Set initialize
  • 自定义智能感知自动完成

    是否可以添加自定义智能感知来自动完成我的字符串 Example 我输入 艾达 它将弹出智能感知 gt Adapt gt Adapter 我正在使用一种新语言 需要向 Visual Studio 2015 的库添加更多功能 使用我的关键字数据
  • 免费升级为付费 Android 应用,不留两个图标

    我有一个Android应用程序 有免费和付费版本 其中免费版本有时间限制 之后它将用户重定向到市场购买付费版本 这两个版本具有不同的包名称 并作为单独的应用程序提交到市场 但是 当用户购买付费版本时 这不会取代免费版本 他们会同时安装两个版
  • 使用 Glide 预加载多个图像

    我们正在努力预加载图像到缓存内存中以便稍后加载它们 图像位于资产文件夹申请的 我们尝试过的 Glide with this load pictureUri diskCacheStrategy DiskCacheStrategy ALL Gl
  • 获取 Spring Security 中所有已登录的用户

    我想获取当前登录我的应用程序的所有用户的列表 我知道 我应该注射SessionRegistry在我的代码中调用getAllPrincipals 方法 不幸的是 我总是得到空列表 看起来SessionRegistry没有填充 我不知道如何制作