Shiro - 项目 开发中的权限管理

大家好,我是 IT 修真院深圳分院第 5 期的学员,一枚正直纯洁善良的的的的的 java 的程序员。
今天给大家分享一下,项目开发之Shiro - 项目 开发中的权限管理。
----------------------------------------------------------------------------------------

1. 背景介绍

什么是权限管理?

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。

权限管理体系几乎可以出现在任何系统里面,只要项目存在有用户和密码的相关概念。

很多人常将 “用户身份认证”、“密码加密”、“系统管理” 等概念与权限管理概念混淆。

权限管理就是管理用户对于资源的操作。

本 CRM 系统的权限(也称作资源)是基于角色操作权限来实现的,即 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。

简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成 “用户 - 角色 - 权限” 的授权模型。

在这种模型中,用户与角色之间,角色与权限之间都是多对多的关系,为了实现表之间多对多的关系,必须将一个多对多的关系通过一个中间表分为两个一对多的关系。

因此引入中间表,用户角色表和角色权限表。

PRAC 模型: 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。

在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。 这就极大地简化了权限的管理。

在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。

角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。

2. 知识剖析

Shiro 架构

两条重要的英文

AuthorizationInfo: Authentication: 身份认证 / 登录,验证用户是不是拥有相应的身份;

AuthenticationInfo:Authorization: 授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,在解释它们前首先必须要描述一下 Shiro 对于安全用户的界定:和大多数操作系统一样。用户具有角色和权限两种最基本的属性。例如,我的 Windows 登陆名称是 learnhow,它的角色是 administrator,而 administrator 具有所有系统权限。这样 learnhow 自然就拥有了所有系统权限。那么其他人需要登录我的电脑怎么办,我可以开放一个 guest 角色,任何无法提供正确用户名与密码的未知用户都可以通过 guest 来登录,而系统对于 guest 角色开放的权限极其有限。同理,Shiro 对用户的约束也采用了这样的方式。AuthenticationInfo 代表了用户的角色信息集合,AuthorizationInfo 代表了角色的权限信息集合。如此一来,当设计人员对项目中的某一个 url 路径设置了只允许某个角色或具有某种权限才可以访问的控制约束的时候,Shiro 就可以通过以上两个对象来判断。

Subject: 主体,代表了当前 “用户”。

所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;

SecurityManager: 安全管理器;即所有与安全有关的操作都会与 SecurityManager 交互;且它管理着所有 Subject;

它是 Shiro 的核心,它负责与后边介绍的其他组件进行交互

可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;

Realm: 域,Shiro 从从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,

Session Manager: 会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;

Caching: 缓存,比如用户登录后,其用户信息、拥有的角色 / 权限不必每次去查,这样可以提高效率;

Remember Me: 记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的;

Cryptography: 加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource,即安全数据源。

Concurrency: shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;

Testing: 提供测试支持;

Run As: 允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

Web Support: Web 支持,可以非常容易的集成到 Web 环境;

3. 常见问题

1.Shiro 是使用 INI 文件来管理相关内容的,我不喜欢这样,要怎么做?

4. 解决方案

1、对象名 = 全限定类名 相对于调用 public 无参构造器创建对象

2、对象名. 属性名 = 值 相当于调用 setter 方法设置常量值

3、对象名. 属性名 =$ 对象引用 相当于调用 setter 方法设置对象引用

5. 编码实战

6. 扩展思考

7. 参考文献

链接地址:http://jinnianshilongnian.iteye.com/blog/2018936/

作者:张开涛

链接地址:https://www.sojson.com/blog/115.html

作者:散仙一枚

8. 更多讨论

1.shiro与spring security的优劣?

shiro 有很多地方都比 spring security 方便简单直接,比起 spring security 的庞大模式更容易理解和切入一些,而 spring security 比 shiro 功能上要多一点,再就是和 spring 框架的无缝对接,比如支持 spel 等,有时候比 shiro 更方便灵活。

2.shiro如何集成redis.

需要根据需求,去实现或者集成shiro的相关接口。

第一件实现 Cache 接口。第二件实现 CacheManager 接口。然后修改配置文件即可。 

3.shiro的使用场景有哪些?

基本上关于资源甚至是存在账户密码的项目,都可以是shiro的使用场景。比如腾讯会员。比如后台管理员。

--------------------------------------------------------------------------

技能树. IT 修真院   
  “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
   这里是技能树. IT 修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄 1 对 1 免费指导。
快来与我一起学习吧〜http://www.jnshu.com/login/1/18140043

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值