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(lin1、创建一个 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、cacheManager5、设置支持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框架原理及应用分析相关推荐

  1. Shiro使用和原理分析---2

    Shiro使用和原理分析-2 为了方便,这里继续引用一下applicationContext.xml中的配置文件 <bean id="shiroFilter" class=& ...

  2. shrio反序列漏洞修复_Apache Shiro Java 反序列化漏洞分析

    Author: rungobier(知道创宇404安全实验室) Date: 2016-08-03 0x00 概述 Apache Shiro 在 Java 的权限及安全验证框架中占用重要的一席之地,在它 ...

  3. shiro的源码分析(一)

    (一)//1.获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager Factory factory = new IniSecurityManagerFac ...

  4. Apache Shiro Java 反序列化漏洞分析

    Shiro概述 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.目前在Java web应用安全框架中,最热门的产品有Spring Security和Sh ...

  5. Shiro 权限绕过漏洞分析(CVE-2020-1957)

    1## 前言 2020年3月23号,Shiro开发者Brian Demers在用户社区发表帖子,提醒shiro用户进行安全更新,本次更新进行了三个修复,其中就包括了对编号为CVE-2020-1957的 ...

  6. Shiro权限绕过漏洞分析(CVE-2020-1957)

    这篇是实战:https://xz.aliyun.com/t/10328,不过中间的以下条件的"2.要以路径通配符**结尾"是错的,这个不是条件,只要让路径规范化处理完后匹配上ano ...

  7. 基本模型计算机框架原理设计 题目分析,计算机销售论文大纲模板 计算机销售论文框架怎么写...

    为论文写作提供[100个]计算机销售论文大纲模板,海量计算机销售相关论文提纲,包括专科与本科以及硕士论文提纲,解决您的计算机销售论文框架怎么写的相关难题! 五.滨海新区中小电脑销售企业发展战略研究论文 ...

  8. Shiro框架在项目中的应用

    1.Shiro 框架简介 Shiro 概述 Shiro 是Apache公司推出一个权限管理框架,其内部封装了项目中认证,授权,加密,会话等逻辑操作,通过Shiro框架可以简化我们项目权限控制逻辑的代码 ...

  9. shiro 学习(一)

    title: shiro学习(一) date: 2020-11-13 tags: spring springboot shiro categories: spring springboot shiro ...

最新文章

  1. 如何系统的学习单片机?
  2. Mysql 另类盲注中的一些技巧
  3. EXCEL导入导出使用的框架
  4. 【插件开发】—— 1 Eclipse插件开发导盲
  5. mysql字符串用法
  6. 百万用户规模的系统如何扩展
  7. 运行linux浏览器,开源也疯狂:5款Linux浏览器推荐
  8. Linux ubuntu18.04下socket聊天室 私聊 群聊
  9. Windows自带远程桌面,非常好用的全新体验。
  10. 基于CodeMirrorTernJS的汉语Javascript编辑器(和翻译器)
  11. elasticsearch使用脚本 滚动关闭索引,更新index setting
  12. You may need to configure your browser or application to trust the Charles Root Certificate. See SSL
  13. win10无线投屏_Win10系统自带手机投屏功能真的能取代投屏器吗?
  14. 趣味题系列(6):帽子戏法
  15. 我猜你也在找内网渗透,这篇难道还不够你嚼烂?
  16. 记录自己复习考研专业课C语言1
  17. python爱因斯坦的问题_基于Python3的趣味数学问题
  18. 甲骨文大裁员后,中国企业软件业务能做什么?
  19. WiFi监控摄像机软件有哪些
  20. Kettle Could not initialize class org.apache.batik.bridge.CursorManager

热门文章

  1. Js双引号和单引号使用注意事项
  2. 动态规划(三)——最少硬币和所有硬币问题
  3. 00058 imp_IMP-00058: ORACLE error 12154 encountered
  4. CentOS 7设置开机启动服务,添加自定义系统服务(Redis为例,绝对有效)
  5. php 获取内容页图片,织梦CMS如何从列表页获取内容页的图片
  6. 瓦片经纬度及行列号转换_ArcGIS根据最大最小坐标换算瓦片行列号
  7. jsp脚本、jsp标准动作、EL表达式、JSTL标签
  8. Asp.Net前台调用后台变量
  9. 移植性问题のCString类型转换,字符串操作和UNICODE、ANSI字符集
  10. ASP.NET部署与安装_MSI制作图文教程.