Shiro架构
时间:2022-07-24
本文章向大家介绍Shiro架构,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Apache Shiro Architecture
Apache Shiro的设计目的是为了简化应用系统鉴权,它将系统与外界的交互进行了高度的抽象。
应用软件通常都是基于用户来设计的,也就是说,基于用户会以怎样的一种方式或者应该以一种怎样的方式来与系统进行交互。例如,如果登陆的用户可以查看自己的账户信息,未登陆的用户则可以执行登陆或者注册行为。
应用系统的设计的目的是为了满足用户需求,用户可以是自然的人,或者其它的应用系统。。
High-Level Overview
从最高层抽象来看,Shiro架构包含三个重要的概念,Subject
, SecurityManager
and Realms
. 如下的流程图展示了各个组件之间是如何交互的:
- Subject:
Subject
就是我们所说的用户,Subject
可以是一个自然人、第三方系统、独立的账户或者定时任务等任何类似的和系统进行交互的对象。所有Subject
实例都必须绑定SecurityManager并交由SecurityManager进行交互管理。
- SecurityManager:
SecurityManager是Shiro框架的核心,是内部安全组件交互的协调者。通常在开发中,SecurityManager及其内部组件可以通过配置来使用,开发者则更多的专注于和用户交互的SubjectAPI开发中。
- Realms: Realms 是连接Shiro和系统安全数据之间的桥梁,当用户和系统的交互涉及到系统安全数据时(如:通过执行身份认证及访问授权),Shiro需要通过配置的一个多个Realms来获取认证账户信息。
在这种场景下,Realm担任着DAO角色,它包装了数据源连接细节,并且提供Shiro需要的相关数据。Shiro配置至少需要配置一个Realm来执行认证和授权。
SecurityManager
需要配置至少一个Realm配置。 Shiro提供了一些立即可用的Realm,包括连接LDAP、JDBC数据源,JNDI数据源及属性文件等。你也可以使用自己实现的Realm作为客户化的数据源为Shiro提供权限数据。SecurityManager
管理着Realms获取权限信息,并转化为使用的Subject
实例。
Detailed Architecture
Shiro 流程图:
- Subject (
org.apache.shiro.subject.Subject
) 系统交互对象。 - SecurityManager (org.apache.shiro.mgt.SecurityManager) 管理用户访问。
- Authenticator (org.apache.shiro.authc.Authenticator)
The
Authenticator
身份认证组件,协调相关realm执行用户登录认证逻辑- Authentication Strategy (org.apache.shiro.authc.pam.AuthenticationStrategy) 多realm认证决策
- Authorizer (org.apache.shiro.authz.Authorizer) 访问控制者,通过特定的访问决策机制,获取相关角色及权限信息,决定用户的访问请求的合法性。
- SessionManager (org.apache.shiro.session.mgt.SessionManager)
创建并管理用户会话生命周期。Shiro可以在任何环境下本地化的管理用户会话,即使没有Web/servlet或者EJB容器。默认情况下,Shiro会使用环境会话管理机制,当然,Shiro也可以使用内置的会话管理机制来提供相同的功能。Shiro SessionDAO可以提供任何数据源的会话持久机制。
- SessionDAO (org.apache.shiro.session.mgt.eis.SessionDAO)
SessionDAO
通过SessionManager
提供Session 的持久化
(CRUD) 操作, 支持任何数据存储。
- SessionDAO (org.apache.shiro.session.mgt.eis.SessionDAO)
- CacheManager (org.apache.shiro.cache.CacheManager)
The
CacheManager
提供Shiro缓存生命周期管理。因为Shiro需要访问很多后台的身份认证,访问控制及会话管理信息。缓存机制能够在很大程度上提升Shiro框架性能。Shiro支持使用任何开源的或者企业缓存产品。 - Cryptography (org.apache.shiro.crypto.*) 加密机制。
- Realms (org.apache.shiro.realm.Realm) 同上。
The SecurityManager
Shiro API 鼓励Subject导向的开发。大多数情况下,开发者也不需要过多的操作 SecurityManager
。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (译)SDL编程入门(6)扩展库SDL_image
- 牛客网剑指offer-2
- 牛客网剑指offer-1
- (译)SDL编程入门(5)Surface 优化和软拉伸
- (译)SDL编程入门(4)按键操作
- webpack实战——生产环境配置【中】
- MongoDB权威指南学习笔记(1)--基础知识与对文档的增删改查
- 利用 Shell 脚本实现邮件监控 Linux 系统的内存
- MongoDB权威指南学习笔记(4)--应用管理和服务器管理
- MongoDB权威指南学习笔记(3)--复制和分片
- 工作10年后,再看String s = new String("xyz") 创建了几个对象?
- MongoDB权威指南学习笔记(2)--设计应用
- 高性能MySQL学习笔记
- 【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
- dubbo(二)动态编译compiler