Spring整合Shiro从源代码探究机制
首先从例如以下配置開始说起
ShiroDbFilterFactoryBean继承了ShiroFilterFactoryBean这个由jar提供的bean类,
而且它实现了InitializingBean接口
方法例如以下
有个基本常识,实例化ShiroDbFilterFactoryBean必先实例化ShiroFilterFactoryBean
那我们应当看看ShiroFilterFactoryBean如今正式開始一步步探个到底。里面都做什么事情了
一、ShiroFilterFactoryBean
1、getObject()方法
此类实现了FactoryBean接口。则Object getObject():返回有FactoryBean创建的Bean实例,假设isSingleton()返回true,则该实例会放到Spring容器的单实例缓存池中。
2、createInstance()方法
3、createFilterChainManager()方法
这种方法将返回shiro须要的一个重要对象:DefaultFilterChainManager
3.1、加入所需过滤器
3.2、加入须要过滤的url连接
3.2.1、splitChainDefinition方法
它的目的是切割
filterTokens[0]=cAuthc
filterTokens[1]=cRoles[999]
3.2.2、toNameConfigPair方法
它的目的是切割。如cRoles[999] 为
nameConfigPair[0]=cRoles
nameConfigPair[1]=999
3.2.3、addToChain方法
3.2.3.1、applyChainConfig方法
找到相应的filter
三、shiro眼下都提供了这些过滤器
仅仅要你的訪问路劲约定了以下随意一个过滤器,都会由其推断你的权限
AnonymousFilter过滤器
在你訪问的地址属于应该AnonymousFilter过滤的时候会发生什么呢。比方/login.html
看到了吧,直接放行
四、PathMatchingFilter
看了上面两个样例了。该注意关键,它们都终于继承了PathMatchingFilter,注意咯,既然都是继承了它。那肯定是PathMatchingFilter对url过滤拦截的时候在拦截方法中会调用
protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue)
一起 看看isFilterChainContinued(request, response, path, config)
onPreHandle(request, response, pathConfig)
真正实现这种方法的是在
这里我们以最重要的 AccessControlFilter 为例
public abstract class AccessControlFilterextendsPathMatchingFilter
- isAccessAllowed:即是否同意訪问,返回true表示同意。
- onAccessDenied:表示訪问拒绝时是否自己处理,假设返回true表示自己不处理且继续拦截器链运行,返回false表示自己已经处理了(比方重定向到还有一个页面)。
也就是说当isAccessAllowed不同意訪问时(false)。由onAccessDenied 处理,比方FormAuthenticationFilter过滤器,它首先推断是不是登陆url。假设是登陆url,又区分是
get提交的话。就放过去,是post提交就登陆。假设不是登陆url,就保存当前訪问的url,而且跳到登陆页。
而isAccessAllowed(request, response, mappedValue)的实如今 public abstract classAuthenticatingFilter
extendsAuthenticationFilter
super.isAccessAllowed(request, response, mappedValue)在它的父类public abstract classAuthenticationFilter
extendsAccessControlFilter
它的作用是推断用户是否authentication(认证; 身份验证)成功过。 ps:authorization(授权,批准)
那么回到public abstract class AccessControlFilter extends PathMatchingFilter
它的onAccessDenied(request, response, mappedValue)由谁实现呢
事实上是详细的过滤器。如:public class FormAuthenticationFilterextendsAuthenticatingFilter
最后说说 appliedPaths 会拿到属于某个过滤器全部它该过滤的链接,那你要问怎么拿到的,别急,跟着一起去看看吧
继续
我们又回到了一開始看到的DefaultFilterChainManager
惊奇吧
就在系统启动初始化的时候,配置中的相关信息就已经都放入各个filter中了
记住一句话源代码面前了无秘密。
Spring整合Shiro从源代码探究机制的更多相关文章
- Spring整合Shiro并扩展使用EL表达式
Shiro是一个轻量级的权限控制框架,应用非常广泛.本文的重点是介绍Spring整合Shiro,并通过扩展使用Spring的EL表达式,使@RequiresRoles等支持动态的参数.对Shiro的介 ...
- Spring整合Shiro做权限控制模块详细案例分析
1.引入Shiro的Maven依赖 <!-- Spring 整合Shiro需要的依赖 --> <dependency> <groupId>org.apache.sh ...
- Spring 整合 Shiro
一.引入依赖 <!-- spring start --> <dependency> <groupId>org.springframework</groupId ...
- Spring整合Shiro 权限 角色 用户关系分析
Spring整合Shiro 权限 角色 用户关系分析 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 前置内容 之前我们学习了,使用注解的方式去完成权限的控制,当然,也是静态的,也就 ...
- spring整合shiro框架
上一篇文章已经对shiro框架做了一定的介绍,这篇文章讲述使用spring整合shiro框架,实现用户认证已经权限控制 1.搭建环境 这里不在赘述spring环境的搭建,可以简单的搭建一个ssm框架, ...
- Spring整合Shiro
apache shiro 是一个安全认证框架,和 spring security 相比,在于他使用了比较简洁易懂的 认证和授权方式.其提供的 native-session(即把用户认证后的授权信息保存 ...
- 【shiro】2.spring整合shiro,注解控制shiro用户/角色/权限And/OR,没有权限跳转到固定页面
这几天粗浅的把shiro整合到spring中,并且注解控制shiro用户/角色/权限And/OR 步骤: 1.首先maven搭建web项目 2.创建数据库 user/role/authority 其中 ...
- 【原】Spring整合Shiro基础搭建[3]
1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本,没有集成其他框架,只是简单的通过Main方法来执行Shiro工作流程,并测试一下比较核心的函数:但在企业开发中一般都会集成Sprin ...
- spring整合shiro配置BUG,Tomcat启动不了:Error during artifact deployment. See server log for details
现象 spring配置shiro权限控制之后,项目无法启动 [2019-08-09 09:00:35,800] Artifact export_web_manager:war exploded: Er ...
随机推荐
- AnyForWeb告诉你什么才是“最好的”编程语言
一被问到最好的编程语言是什么,专家们一定会异口同声的说,'世界上根本没有什么最好的,每一种编程语言都有它存在的意义和价值'. AnyForWeb认为,后半句所阐述的观点全然没错,但最好的也并不是不存在 ...
- 开源APM应用性能管理工具调研
近期在设计一个DevOps平台.希望整合一个APM工具进来,由于APM既可用于性能測试也可用于运维性能监控,是典型的Dev+Ops产品. 商业的APM工具国内外已经有不少成熟产品了,而开源的好像不多见 ...
- [寒江孤叶丶的Cocos2d-x之旅_33]RichTextEx一款通过HTML标签控制文字样式的富文本控件
RichTextEx一款通过HTML标签控制文字样式的富文本控件 原创文章,欢迎转载.转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net ...
- MSSQL执行大脚本文件时,提示“内存不足”的解决办法
导出了一个脚本文件,将近900M,回来往sql studio一丢,报了个内存不足,然后就有了此文.. 问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当 ...
- 写函数,输入n个数字输出最大值和最小值
# ,写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}# 例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置 ...
- ffmpeg x264编译与使用介绍
问题1:我用的是最新版本的ffmpeg和x264,刚刚编译出来,编译没有问题,但是在linux 环境使用ffmpeg的库时发现报错error C3861: 'UINT64_C': identifier ...
- struts2学习之基础笔记6
第十一章 Struts 2的国际化 1 国际化简介 http协议,request_locale值 Locale类àà封装类request_locale值 ResourcesBandleàà ...
- px 与 pt
px:pixel,像素,屏幕上显示的最小单位,用于网页设计,直观方便: pt:point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用: em:即%,在CSS中,1em=100 ...
- JS装饰器模式
装饰器模式:在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法),保护原有功能的完整性需要条件:原对象,新内容(属性/方法)个人理解:重新实现一下,原对象的方法,在方法内容,先执行原对象的 ...
- GridBagLayout使用案例+获取目录下所有的文件+获取创建时间及最后修改时间
package vvv; import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLay ...