Apache Shiro的设计目的是为了简化应用系统鉴权,它将系统与外界的交互进行了高度的抽象。
应用软件通常都是基于用户来设计的,也就是说,基于用户会以怎样的一种方式或者应该以一种怎样的方式来与系统进行交互。例如,如果登陆的用户可以查看自己的账户信息,未登陆的用户则可以执行登陆或者注册行为。
应用系统的设计的目的是为了满足用户需求,用户可以是自然的人,或者其它的应用系统。。
从最高层抽象来看,Shiro架构包含三个重要的概念,Subject
, SecurityManager
and Realms
. 如下的流程图展示了各个组件之间是如何交互的:
Subject
就是我们所说的用户,Subject
可以是一个自然人、第三方系统、独立的账户或者定时任务等任何类似的和系统进行交互的对象。
所有Subject
实例都必须绑定 SecurityManager并交由SecurityManager进行交互管理。
SecurityManager是Shiro框架的核心,是内部安全组件交互的协调者。通常在开发中,SecurityManager及其内部组件可以通过配置来使用,开发者则更多的专注于和用户交互的SubjectAPI开发中。
SecurityManager
需要配置至少一个Realm配置。
Shiro提供了一些立即可用的Realm,包括连接LDAP、JDBC数据源,JNDI数据源及属性文件等。你也可以使用自己实现的Realm作为客户化的数据源为Shiro提供权限数据。
SecurityManager
管理着Realms获取权限信息,并转化为使用的Subject
实例。
Shiro 流程图:
org.apache.shiro.subject.Subject
)
系统交互对象。
Authenticator
身份认证组件,协调相关realm执行用户登录认证逻辑
SessionDAO
通过 SessionManager
提供 Session 的持久化
(CRUD) 操作, 支持任何数据存储。
CacheManager
提供Shiro缓存生命周期管理。因为Shiro需要访问很多后台的身份认证,访问控制及会话管理信息。缓存机制能够在很大程度上提升Shiro框架性能。Shiro支持使用任何开源的或者企业缓存产品。
SecurityManager
Shiro API 鼓励Subject导向的开发。大多数情况下,开发者也不需要过多的操作 SecurityManager
。