Shiro框架原理及应用分析
shiro 介绍
- ounter(line
Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
学习shiro原因
既然shiro将安全认证相关的功能抽取出来组成一个框架,使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。
shiro使用广泛,shiro可以运行在web应用,非web应用,集群分布式应用中越来越多的用户开始使用shiro。
java领域中spring security(原名Acegi)也是一个开源的权限管理框架,但是spring security依赖spring运行,而shiro就相对独立,最主要是因为shiro使用简单、灵活,所以现在越来越多的用户选择shiro。
Shiro架构
概念解释
Subject
Subject即主体,外部应用与subject进行交互,subject记录了当前操作用户,将用户的概念理解为当前操作的主体,可能是一个通过浏览器请求的用户,也可能是一个运行的程序。
Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,而subject是通过SecurityManager安全管理器进行认证授权
SecurityManager
SecurityManager即安全管理器,对全部的subject进行安全管理,它是shiro的核心,负责对所有的subject进行安全管理。
通过SecurityManager可以完成subject的认证、授权等,实质上SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理等。
SecurityManager是一个接口,继承了Authenticator, Authorizer, SessionManager这三个接口。
Authenticator
Authenticator即认证器,对用户身份进行认证
Authenticator是一个接口,shiro提供ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator基本上可以满足大多数需求,也可以自定义认证器
Authorizer
Authorizer即授权器,用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。
realm
Realm即领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份数据在数据库那么realm就需要从数据库获取用户身份信息。
注意:不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。
sessionManager
sessionManager即会话管理,shiro框架定义了一套会话管理,它不依赖web容器的session,所以shiro可以使用在非web应用上,也可以将分布式应用的会话集中在一点管理,此特性可使它实现单点登录。
SessionDAO
SessionDAO即会话dao,是对session会话操作的一套接口,比如要将session存储到数据库,可以通过jdbc将会话存储到数据库。
CacheManager
CacheManager即缓存管理,将用户权限数据存储在缓存,这样可以提高性能。
Cryptography
Cryptography即密码管理,shiro提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。
shiro包
shiro-core是核心包必须选用,还提供了与web整合的shiro-web、与spring整合的shiro-spring、与任务调度quartz整合的shiro-quartz等
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-quartz</artifactId>
<version>1.2.3</version>
</dependency>
也可以通过引入shiro-all包括shiro所有的包:
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.2.3</version>
</dependency>
代码刨析
刨析后台管理经典框架Jeesite 使用Shiro的过程及原理分析
Jeesite框架源码都可以下载得到 有springboot版本 也有springcloud版本
http://jeesite.com/
刨析原则:
1、先刨析代码的每一个部分
2、再把所有的部分串联起来 组成一整条链 进而对shiro原理理解的更加透彻
ShiroConfig类
- ounter(lin
1、创建一个 FilterRegistrationBean<Filter> 对象 ,该对象相当于一个list<String>集合 里面的每一个元素都是一道地铁安检门 门口又一个小姐姐 见到笑容满面过来的你 说:来者何人?让我来检查下你是否安全,能否进入地铁
2、从ShiroFilterFactoryBean工厂中获取所有的shirofilter过滤器
3、规定对哪些”人“(url)进行“安检” 途中是对所有的路径都进行安检
- ounter(line
这是定义了一个内部系统访问过滤器 具体内部逻辑我们待会再看
- ounter(line
这是定义了一个cas过滤器 并将给该过滤器指定了一个安全认证实现类 具体内部逻辑我们待会再看
- ounter(line
这是一个表单登陆过滤器 并将指定了相应的安全认证实现类
- ounter(line
这是一个登出过滤器 并指定了安全认证实现类
- ounter(line
这是一个字符串权限过滤器
- ounter(line
角色权限过滤器
- ounter(line
用户权限过滤器
这是一个 shiro过滤器工厂
1、给该过滤器工厂设置安全管理员
2、设置登陆路径
3、设置登陆成功访问路径
4、把上面介绍的所有的过滤器都配置起来并设置过滤器标识
5、设置过滤链定义 在配置文件中配置的 具体看下
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
比如
/validCode = anon 表示 访问validCode接口 不做校验
${adminPath}/file/** = user 表示 访问/file/** 的所有接口 走 user标识的过滤器
${adminPath}/cms/* = perms[cms:view] 这个表示 访问 /cms/* 的所有接口 必须具备 cms:view 权限标示
- ounter(line
给安全认证实现类AuthorizingRealm 设置 sessionDao
- ounter(line
单点登陆时 退出时使用
- ounter(line
- ounter(line
- ounter(line
安全认证实现类 CasAuthorizingRealm
设置 sessionDao、cas登出处理类、cas服务地址、cas服务回调地址
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
定义shiro安全管理配置
1、创建 WebSecurityManager 对象 并做以下配置
2、将2个安全认证类增加到realm集合中
3、定义自定义session监听事件
4、配置sessionManager、cacheManager
5、设置支持cas的subject工厂
- ounter(line
shiro生命周期处理器 实现初始化和销毁回调
- ounter(line
过滤器代理配置
- ounter(line
启用注解方式aop拦截方法级权限检查
将上面所有的类串联起来
UserFilter 刨析
- ounter(line
继承自shiro包中的UserFilter
权限字符串过滤器 PermissionsAuthorizationFilter 刨析
- ounter(line
继承自shiro包中的PermissionsAuthorizationFilter
- ounter(line
知识点:Ajax默认是不支持重定向的,只局部刷新数据,不跳转页面
LogoutFilter 登出过滤器 源码刨析
- ounter(line
继承了 LogoutFilter
- ounter(line
获取重定向路径
InnerFilter 内部系统访问过滤器
- ounter(line
继承了 shiro的 AccessControlFilter
FormAuthenticationFilter 表单验证 包含验证码 过滤器
- ounter(line
继承 shiro包中的 FormAuthenticationFilter
CasAuthenticationFilter cas过滤器
- ounter(line
继承 CasFilter
AuthorizingRealm 安全认证类
CasAuthorizingRealm cas安全认证类
‘
单点登陆
Shiro框架原理及应用分析相关推荐
- Shiro使用和原理分析---2
Shiro使用和原理分析-2 为了方便,这里继续引用一下applicationContext.xml中的配置文件 <bean id="shiroFilter" class=& ...
- shrio反序列漏洞修复_Apache Shiro Java 反序列化漏洞分析
Author: rungobier(知道创宇404安全实验室) Date: 2016-08-03 0x00 概述 Apache Shiro 在 Java 的权限及安全验证框架中占用重要的一席之地,在它 ...
- shiro的源码分析(一)
(一)//1.获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager Factory factory = new IniSecurityManagerFac ...
- Apache Shiro Java 反序列化漏洞分析
Shiro概述 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.目前在Java web应用安全框架中,最热门的产品有Spring Security和Sh ...
- Shiro 权限绕过漏洞分析(CVE-2020-1957)
1## 前言 2020年3月23号,Shiro开发者Brian Demers在用户社区发表帖子,提醒shiro用户进行安全更新,本次更新进行了三个修复,其中就包括了对编号为CVE-2020-1957的 ...
- Shiro权限绕过漏洞分析(CVE-2020-1957)
这篇是实战:https://xz.aliyun.com/t/10328,不过中间的以下条件的"2.要以路径通配符**结尾"是错的,这个不是条件,只要让路径规范化处理完后匹配上ano ...
- 基本模型计算机框架原理设计 题目分析,计算机销售论文大纲模板 计算机销售论文框架怎么写...
为论文写作提供[100个]计算机销售论文大纲模板,海量计算机销售相关论文提纲,包括专科与本科以及硕士论文提纲,解决您的计算机销售论文框架怎么写的相关难题! 五.滨海新区中小电脑销售企业发展战略研究论文 ...
- Shiro框架在项目中的应用
1.Shiro 框架简介 Shiro 概述 Shiro 是Apache公司推出一个权限管理框架,其内部封装了项目中认证,授权,加密,会话等逻辑操作,通过Shiro框架可以简化我们项目权限控制逻辑的代码 ...
- shiro 学习(一)
title: shiro学习(一) date: 2020-11-13 tags: spring springboot shiro categories: spring springboot shiro ...
最新文章
- 如何系统的学习单片机?
- Mysql 另类盲注中的一些技巧
- EXCEL导入导出使用的框架
- 【插件开发】—— 1 Eclipse插件开发导盲
- mysql字符串用法
- 百万用户规模的系统如何扩展
- 运行linux浏览器,开源也疯狂:5款Linux浏览器推荐
- Linux ubuntu18.04下socket聊天室 私聊 群聊
- Windows自带远程桌面,非常好用的全新体验。
- 基于CodeMirrorTernJS的汉语Javascript编辑器(和翻译器)
- elasticsearch使用脚本 滚动关闭索引,更新index setting
- You may need to configure your browser or application to trust the Charles Root Certificate. See SSL
- win10无线投屏_Win10系统自带手机投屏功能真的能取代投屏器吗?
- 趣味题系列(6):帽子戏法
- 我猜你也在找内网渗透,这篇难道还不够你嚼烂?
- 记录自己复习考研专业课C语言1
- python爱因斯坦的问题_基于Python3的趣味数学问题
- 甲骨文大裁员后,中国企业软件业务能做什么?
- WiFi监控摄像机软件有哪些
- Kettle Could not initialize class org.apache.batik.bridge.CursorManager
热门文章
- Js双引号和单引号使用注意事项
- 动态规划(三)——最少硬币和所有硬币问题
- 00058 imp_IMP-00058: ORACLE error 12154 encountered
- CentOS 7设置开机启动服务,添加自定义系统服务(Redis为例,绝对有效)
- php 获取内容页图片,织梦CMS如何从列表页获取内容页的图片
- 瓦片经纬度及行列号转换_ArcGIS根据最大最小坐标换算瓦片行列号
- jsp脚本、jsp标准动作、EL表达式、JSTL标签
- Asp.Net前台调用后台变量
- 移植性问题のCString类型转换,字符串操作和UNICODE、ANSI字符集
- ASP.NET部署与安装_MSI制作图文教程.