百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Shiro框架原理及应用分析(shiro框架授权的四种方式)

ccwgpt 2024-09-27 07:30 25 浏览 0 评论

shiro 介绍


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所有的包:






<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类






1、创建一个 FilterRegistrationBean<Filter> 对象 ,该对象相当于一个list<String>集合  里面的每一个元素都是一道地铁安检门 门口又一个小姐姐 见到笑容满面过来的你 说:来者何人?让我来检查下你是否安全,能否进入地铁
2、从ShiroFilterFactoryBean工厂中获取所有的shirofilter过滤器 
3、规定对哪些”人“(url)进行“安检” 途中是对所有的路径都进行安检

这是定义了一个内部系统访问过滤器 具体内部逻辑我们待会再看

这是定义了一个cas过滤器 并将给该过滤器指定了一个安全认证实现类 具体内部逻辑我们待会再看

这是一个表单登陆过滤器 并将指定了相应的安全认证实现类

这是一个登出过滤器 并指定了安全认证实现类

这是一个字符串权限过滤器

角色权限过滤器

用户权限过滤器








这是一个 shiro过滤器工厂
1、给该过滤器工厂设置安全管理员2、设置登陆路径3、设置登陆成功访问路径4、把上面介绍的所有的过滤器都配置起来并设置过滤器标识5、设置过滤链定义 在配置文件中配置的 具体看下






比如 /validCode = anon 表示 访问validCode接口 不做校验 
${adminPath}/file/** = user 表示 访问/file/** 的所有接口 走 user标识的过滤器 
${adminPath}/cms/* = perms[cms:view] 这个表示 访问  /cms/* 的所有接口 必须具备 cms:view 权限标示

给安全认证实现类AuthorizingRealm 设置 sessionDao

单点登陆时 退出时使用



安全认证实现类 CasAuthorizingRealm
设置 sessionDao、cas登出处理类、cas服务地址、cas服务回调地址







定义shiro安全管理配置
1、创建 WebSecurityManager 对象 并做以下配置2、将2个安全认证类增加到realm集合中 3、定义自定义session监听事件4、配置sessionManager、cacheManager5、设置支持cas的subject工厂

shiro生命周期处理器 实现初始化和销毁回调

过滤器代理配置

启用注解方式aop拦截方法级权限检查

将上面所有的类串联起来

UserFilter 刨析


继承自shiro包中的UserFilter

权限字符串过滤器 PermissionsAuthorizationFilter 刨析


继承自shiro包中的PermissionsAuthorizationFilter

知识点:Ajax默认是不支持重定向的,只局部刷新数据,不跳转页面

LogoutFilter 登出过滤器 源码刨析


继承了 LogoutFilter

获取重定向路径

InnerFilter 内部系统访问过滤器


继承了 shiro的 AccessControlFilter

FormAuthenticationFilter 表单验证 包含验证码 过滤器


  继承 shiro包中的 FormAuthenticationFilter

CasAuthenticationFilter cas过滤器


继承 CasFilter

AuthorizingRealm 安全认证类

CasAuthorizingRealm cas安全认证类

单点登陆

相关推荐

机器学习框架TensorFlow入门(tensorflow框架详解)

ensorFlow是一个广泛使用的开源机器学习框架,由GoogleBrain团队开发。它支持广泛的机器学习和深度学习任务,并且可以在CPU和GPU上运行。下面是一个使用TensorF...

合肥高新区企业本源发布量子机器学习框架VQNet 开辟量子机器学习的新领域

近日,高新区企业合肥本源量子计算科技有限责任公司通过研究混合实现变分量子算法和经典机器学习框架的可能性,全新开发了量子机器学习框架VQNet,可满足构建所有类型的量子机器学习算法,实现量子-经典混合任...

如何使用 TensorFlow 构建机器学习模型

在这篇文章中,我将逐步讲解如何使用TensorFlow创建一个简单的机器学习模型。TensorFlow是一个由谷歌开发的库,并在2015年开源,它能使构建和训练机器学习模型变得简单。我们接下...

机器学习框架底层揭秘:PyTorch、TensorFlow 如何高效“跑模型”

在使用PyTorch或TensorFlow时,你是否想过:这些深度学习框架底层到底是怎么运行的?为什么我们一行.backward()就能自动计算梯度?本篇将用最简单的语言,拆解几个关键概念...

2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?

这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...

基于SpringBoot 的CMS系统,拿去开发企业官网真香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

【网络安全】关于Apache Shiro权限绕过高危漏洞的 预警通报

近日,国家信息安全漏洞共享平台(CNVD)公布了深信服终端检测平台(EDR)远程命令执行高危漏洞,攻击者利用该漏洞可远程执行系统命令,获得目标服务器的权限。一、漏洞情况ApacheShiro是一个强...

开发企业官网就用这个基于SpringBoot的CMS系统,真香

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服。开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。...

这款基于SpringBoot 的CMS系统,开发企业官网确实香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

【推荐】一款基于BPM和代码生成器的 AI 低代码开源平台

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍JeecgBoot是一款基于BPM和代码生成器的AI低代码平台,专为Java企业级Web应用而生。它采...

云安全日报200819:Apache发现重要漏洞 可窃取信息 控制系统 需要尽快升级

ApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软...

基于jeecgboot框架的cloud商城源码分享,兼容单体和微服务模式

3年时间里,随着关注java单商户商城系统的朋友越来越多,对cloud版本的商城呼声也越来越高。因此今年立项了cloud版本的开发,目前已发gitee开源,目前也基本测试完毕,欢迎大家体验以及提出宝贵...

SpringBoot + Mybatis + Shiro + mysql + redis智能平台源码分享

后端技术栈基于SpringBoot+Mybatis+Shiro+mysql+redis构建的智慧云智能教育平台基于数据驱动视图的理念封装element-ui,即使没有vue的使...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板-基础框架-分布式架构-开源项目-持续集成-自动化部署-系统监测-无缝升级的全方位J2EE企业级开发解...

取消回复欢迎 发表评论: