核心类
整体类图如下图所示:
类名 |
作用 |
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(密码管理) |
提供了一套加密和解密的组件,方便开发,比如提供常用的散列、加密和解密等功能 |