检查每个已登录主题的权限

时间:2015-07-28 19:30:01

标签: shiro

在我们的应用程序中,我们将WebSocket信息存储在经过身份验证的用户会话中。当新数据到达时,我们希望将其广播给有权查看特定数据集的所有活动用户。如何获取所有活动会话的主题? (使用Subject,我可以在传递数据集之前checkPermission()。)

我知道如何获得所有活跃的会话。我知道如何设置DefaultSessionStorageEvaluator以在会话中保存PrincipalCollection。我知道RememberMeManager会看到主题。我知道AuthenticationListener。我知道对各种类进行子类化以覆盖各种登录和经过身份验证的方法。

我是否需要从PrincipalCollection维护自己的地图 - >学科?我是否忽略了现有代码库中的一个?我应该将主题本身存储在会话中吗?

1 个答案:

答案 0 :(得分:0)

通过为每个会话构建一个新主题,您可以获得活动会话的主题(无需保留一个主题)。就这样:

...getActiveSessions()
  .forEach (session -> 
     new Subject.Builder()
       .session (session)
       .buildSubject()
       .execute (() -> /* consume w/ Subject 'bound' */));
相关问题