java - 如何判断一个shiro用户有哪些权限

标签 java shiro

我必须处理一个由 apache shiro 保护的应用程序。 我对这个框架很陌生。据我所知,我可以通过 subject.isPermitted() 检查单一权限,例如

Subject subject = SecurityUtils.getSubject();
[...]
subject.isPermitted("$RightString");

出于记录目的,我需要完整的用户权限列表作为字符串。而且我不想遍历权利列表并每次检查 subject.isPermitted() 是否为 true

这个问题有捷径吗?

编辑:

更多信息:

  • 应用程序是 Spring 4 应用程序
  • realm 在应用上下文中定义为一个 bean

     <bean id="PRODUCTNAMERealm" class="de.PATHFROMPRODUCT_PRODUCTNAMEJdbcRealm">
         <property name="dataSource" ref="dataSource"/>
         <property name="schema" value="${PRODUCTNAME.schema}"/>
     </bean>
    

    所以我可以在需要时注入(inject)它。

最佳答案

我相信没有现成的方法可以做到这一点,我们可以通过在 session 上注册用户权限来解决这个问题。我们正在使用自定义领域实现,我们的权限存储在数据库中。

在我们的自定义领域类中:

@Override
public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    Set<String> permissionsSet = //logic to get the permissions here

    info.addStringPermissions(permissionsSet);

    SecurityUtils.getSubject().getSession().setAttribute("permissions", permissionsSet);
    return info;
}

现在检索权限只是调用的问题:

SecurityUtils.getSubject().getSession().getAttribute("permissions");

另一种方法是在您需要信息的地方注入(inject)您的自定义领域,并让 bean 公开 getAuthorizationInfo。

@Override
public AuthorizationInfo getAuthorizationInfo(PrincipalCollection principals) {
    return super.getAuthorizationInfo(principals);
}

....

yourRealm.getAuthorizationInfo(SecurityUtils.getSubject().getPrincipals()).getStringPermissions();

关于java - 如何判断一个shiro用户有哪些权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566864/

相关文章:

java - 像 Netbeans 一样 Swing 输出窗口

java - 重新部署项目后,存储在 session 中的对象将不匹配同一类

java - 为什么 Shiro 的 AnonymousFilter 不在这个例子中创建新的网络 session ?

shiro - 如何配置 Apache Shiro 过多失败登录尝试的阈值?

java - 如何在 Spring WebSocketStompClient 中获取 Session Id?

java - 某一列的更改源 RethinkDB

java - Spring @Cacheable 除非由自定义 key 生成器创建的属性引用 key

java - 泛型中的通配符类型

rest - Apache Shiro 和 JWT 实现问题,当每个用户使用不同的 secret 时

grails - (默认程序包)在GGTS中