我必须处理一个由 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/