加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Apache Shiro中的实例级访问控制

发布时间:2020-12-15 01:01:47 所属栏目:Java 来源:网络整理
导读:我发现了一个灵活的安全框架Apache Shiro.我使用Shiro成功实现了身份验证和授权. 该框架的一个吸引人的特性是基于实例的安全性.我刚从Shiro网站上复制了一些例子. 以下权限存储在数据库中. printer:query:lp7200printer:print:epsoncolor 以下代码检查对于给
我发现了一个灵活的安全框架Apache Shiro.我使用Shiro成功实现了身份验证和授权.

该框架的一个吸引人的特性是基于实例的安全性.我刚从Shiro网站上复制了一些例子.

以下权限存储在数据库中.

printer:query:lp7200
printer:print:epsoncolor

以下代码检查对于给定的打印机实例,当前经过身份验证的用户是否具有权限.

if ( SecurityUtils.getSubject().isPermitted("printer:query:lp7200") {
 // Return the current jobs on printer lp7200
}

我的问题是“这是权限存储在数据库中的方式吗?”
有没有更好的方法来存储基于实例的权限?

请告诉我.

谢谢

解决方法

如何存储此信息完全取决于您.您的Realm实现负责查询您正在使用的任何数据源,并以您喜欢的格式提取权限数据.

有些人直接将它们存储为字符串(如示例中所示),其他人将它们存储在专用表中(例如,如果使用RDBMS)(例如permission_type,target,action columns).您可以将权限实体关联到角色,也可以直接关联到用户或分配给用户的组等,但这对您的应用程序有意义.

您的存储选项完全取决于您.您实现了数据,但是您希望确保Realm.isPermitted(…)操作按预期运行.

不是直接实现Realm.isPermitted(…)方法,许多人发现将抽象的AuthorizingRealm类子类化并覆盖doGetAuthorizationInfo方法并返回支持权限表示的AuthorizationInfo实例更方便.

在该方法中,您可以查询数据存储区,将返回的数据转换为AuthorizationInfo实例,并且您将完成(不要忘记启用授权缓存 – 您将看到一个很大的性能优势).

覆盖领域isPermitted方法只有在你想要非常具体的控制查询等时才是必要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读