shiro-filter执行流程
web中
在xml中配置
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
web.xml 中配置了shiroFilter代理,以后每当request请求时都会被改代理拦截,然后代理中调用真正的被代理filter执行处理(还没有弄清楚真正的代理对象怎么变成Filter)
DelegatingFilterProxy中初始化 delegate的过程
根据该<filter>配置中的 <filter-name>=shiroFilter去spring工厂中getBean("shiroFilter",Filter.class) 最终获取到
org.apache.shiro.spring.web.ShiroFilterFactoryBean 的一个单实例,可以看到 ShiroFilterFactoryBean没有实现任何Filter接口, Filter delegate = wac.getBean(getTargetBeanName(), Filter.class); 生成该Filter
被代理的对象 org.apache.shiro.spring.web.ShiroFilterFactoryBean
Spring生成的是ShiroFilterFactoryBean代理对象 实际上是个Filter
在spring.xml中配置
<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login.jsp"/>
<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
<property name="filters">
<util:map>
<entry key="authc" value-ref="formAuthenticationFilter"/>
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
/index.jsp = anon
/unauthorized.jsp = anon
/login.jsp = authc
/logout = logout
/** = user
</value>
</property>
</bean>
后面所有的处理都是 DelegatingFilterProxy中交给 delegate 去执行的,实际上就是执行一个过滤器链
auth
表单登录
真正调用Realm auth的地方
retryCount判断
密码匹配
登录成功------
AdviceFilter 切面过滤hasRole 等注解
AccessControlFilter
isAccessAllowed 判断是否登录(身份是否有效)
onAccessDenied
shiro拦截器链: http://blog.csdn.net/angel_g/article/details/53993877
权限校验是通过methodInterceptor方式
Eclipse Debug中方法栈,
Filter处理完 ,后面通过MethodInterceptor方式处理@hasRole 等注解检查权限操作
spring mvc中
org.springfreamwork.web.servlet.DispatherServlet 中通过HandleMapping将 controller中 方式上的 requestMapping将 该方法关联起来
HandlerMapping 中 HandlerExecutionChain 中的Handler为 HandlerMethod
每个HandingMapping可以配置 handlerInterceptor
DispatcherServlet中 doService() 中调用doDispatch方法
========================================================================================
shiro-web集成spirng 权限,角色@hasRole 注解校验入口
切面方式
shiro-filter执行流程的更多相关文章
- 第二讲shiro异常及执行流程
在认证过程中,有一个父异常为:AuthenticationException 该异常有几个子类,分别对应不同的异常情况: (1)DisabledAccountException:账户失效异常 (2)E ...
- apache shiro的工作流程分析
本文基于shiro的web环境,用宏观(也就是不精确)的角度去理解shiro的工作流程,先看shiro官方的一张图. 和应用程序直接交互的对象是Subject,securitymanager为Subj ...
- ThinkPHP中的跨控制器调用与框架执行流程
一.跨控制器调用 UserController.class.php <?php namespace Home/Controller use Think/Controller class User ...
- angularjs源码分析之:angularjs执行流程
angularjs用了快一个月了,最难的不是代码本身,而是学会怎么用angular的思路思考问题.其中涉及到很多概念,比如:directive,controller,service,compile,l ...
- Servlet、Struts2、SpringMVC执行流程
Servlet 有以下四个阶段: 1.加载和实例化 Servlet容器负责加载和实例化Servlet. 当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Ser ...
- 捣蛋phpwind过滤器执行流程
从上一篇我们就大概就知道过滤器的定义和怎样去配置,这一节来说说执行流程 public function run($handlerAdapter = null) { $handlerAdapter != ...
- angularjs执行流程
angularjs源码分析之:angularjs执行流程 angularjs用了快一个月了,最难的不是代码本身,而是学会怎么用angular的思路思考问题.其中涉及到很多概念,比如:directi ...
- struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】
入门框架学习避免不了的问题: 1. 什么是框架? 简单的说,框架就是模板,模子,模型.就是一个可重用的半成品. 2. 如何学习框架? 学习框架其实就是学习规则,使用框架就是遵循框架的规则,框架是可变的 ...
- Struts框架之 执行流程 struts.xml 配置详细
1.执行流程 服务器启动: 1. 加载项目web.xml 2. 创建Struts核心过滤器对象, 执行filter → init() struts-default.xml, 核心功能的初 ...
- Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...
随机推荐
- 【WPF】C#代码动态添加控件的Margin属性
需求:一组按钮的数据是从服务器中Json数据发过来的,需要根据这个Json数据动态地添加这组按钮. 工具:使用http://www.newtonsoft.com/json来解析Json. 过程:C#代 ...
- C语言 · 求指数
算法训练 5-2求指数 时间限制:1.0s 内存限制:256.0MB 问题描述 已知n和m,打印n^1,n^2,...,n^m.要求用静态变量实现.n^m表示n的m次方.已知n和m, ...
- java——多线程的实现
package test; class TestThread extends Thread{ public void run() { for(int n=0;n<3;n++) { try{Thr ...
- 数据结构——算法之(043)(c++各种排序算法实现)
[申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:Mr_chenping@163.com] 题目: c++ 各种排序算法实现 题目分析: 详细排序原理參考相关算法书籍 算法实现 ...
- 判断一个string是否以数字开头
public static void main(String[] args) { Pattern pattern =null; String content = "30. ...
- PHP框架之ThinkPHP项目CMS内容管理系统源码及开发手册视频
http://download.csdn.net/download/duguqing/4203042
- android EditText设置光标、边框和图标,以及限制输入
控制边框形状,先在drawable中建一个xml文件:shape.xml <?xml version="1.0" encoding="utf-8"?> ...
- Qt的窗口的最大化。
1.window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗 ...
- erlang的小知识,未分类。
erlang:module_loaded(module):检测模块是否已加载:
- 学习 TList 类的实现[1]
最近整理了一些函数列表, 算是一个宏观的安排; 等以后再碰到一些函数时就可以放置的更有次序一些. 我对函数与类的理解是: 函数是一个功能模块, 类是一个更强大的功能模块; Delphi 已经提供了很多 ...