什么是权限管理
权限管理就是实现对用户访问系统的资源进行控制,用户可以访问而且只能访问自己被授权的资源,只要有用户和密码的系统,权限管理几乎都会出现,举例,给张三赋予 “人力资源经理” 的角色,“人力资源经理” 具有 “查询员工”、“添加员工”、“修改员工” 和 “删除员工” 的权限。此时张三能够进入系统,则只可以进行这些操作。
在此建议Shiro可以适当的看看不必深究,现在都是使用Spring security or Sa-Token
权限管理
认证
访问需要授权的系统资源,用户首先需要经过身份认证,也就是判断一个用户是否为合法的用户的处理过程。
授权
认证通过之后,在看看该用户具有哪些权限,就是可以访问的资源范围,控制能够访问哪些资源的一个过程。
Shiro概述
Apache Shiro 是 Java 的一个安全框架,Shiro 是一个强大的简单易用的 Java安全框架,主要用来更便捷的 认证
、授权
、加密
、会话管理
、与 Web集成、缓存等,Shiro 使用起来体积小而简单,Spring 中有一个 Spring Security,也是一个权限框架,它和 Spring 依赖过于紧密,没有 Shiro 使用简单,相对比 Spring Security 难一点,Shiro 不依赖于 Spring,Shiro 不仅可以实现 Web应用的权限管理,还可以实现 C/S 系统的权限管理,分布式系统的权限管理,Shiro 属于轻量级的框架,越来越多企业项目开始使用Shiro 来作为自己系统的安全框架了。
核心类
整体类图如下图所示:
类名 | 作用 |
---|---|
Authentication | 身份认证,也就是登录,验证用户是不是拥有相应的身份 |
Authorization | 授权,也就是权限验证,验证某个已认证的用户是否拥有某个权限 |
Session Manager | 会话管理,就是用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话当中 |
Cryptography | 加密,保护数据的安全性 |
Web Support | Web 的支持,可以非常容易的集成到 Web环境 |
Caching | 缓存,比如用户登录后的用户信息、拥有的角色和权限不必每次去查,这样可以提高效率 |
Concurrency | Shiro 支持 |
Testing | 提供了测试的支持 |
Run As | 允许一个用户假装为另一个用户(如果他们允许)的身份进行访问 |
Remember Me | 记住我,这个是非常常见的功能,即一次登录之后,下次再来的话就不用在登录了 |
主要概念
Subject
当前的操作用户,可以是人,爬虫,当前正在跟软件交互的东西,在 Shiro 当中我们可以统称 Subject
为 "用户" 在代码的任何地方,你都能轻易的获得 Shiro Subject
,一旦获得 Subject,你就可以立即获得你希望用 Shiro 为当前用户做的 90% 的事情,也就是说你就可以使用 Shiro 为当前的用户做 90% 的事情了,登录、退出、访问会话、执行授权检查等。
SecurityManager
SecurityManager 则管理所有用户的安全操作,引用了多个内部嵌套的安全组件,是 Shiro 框架的核心,你可以把它看成是一个 DispatcherServlet
前端控制器,用于调度各种 Shiro 框架的服务
Realms
Realms 则是用户的信息认证器和用户的权限认证器,执行认证(登录)和授权(访问控制)时,Shiro 会从应用配置的 Realm 中查找很多内容,Realm 可以理解为读取用户信息、角色及权限的 DAO,SecurityManager 要验证用户的身份与权限,那么它需要从 Realm 中获取相应的信息进行比较来确定用户的身份是否合法,可以把 Realm 看成 DataSource,安全数据源。
Shiro的架构
组件名 | 作用 |
---|---|
Subject(主体) | 主体可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权才可以进行访问 |
SecurityManager(安全管理器) | 对主体进行认证和授权都是通过 SecurityManager 进行的 |
Authenticator(认证器) | 主体进行认证最终通过 Authenticator 来进行认证的 |
Authorizer(授权器) | 主体进行授权最终通过 Authenticator 来进行授权的 |
SessionManager(会话管理) | Web 应用中一般是用 Web容器对 Session 进行管理,Shiro 也提供了一套Session管理的方式 |
SessionDao | 通过 SessionDao 管理 Session数据 |
CacheManager(缓存管理器) | 主要对 Session 和授权数据进行缓存,比如将授权数据通过 CacheManager 进行缓存管理,和 Ehcache 整合对缓存数据进行管理 |
Realm(领域) | 相当于数据源,通过 Realm 存取认证、授权相关的数据 |
Cryptography(密码管理) | 提供了一套加密和解密的组件,方便开发,比如提供常用的散列、加密和解密等功能 |
最后
本期结束咱们下次再见