【Shiro权限管理】4. Shiro工作流程
2017-10-22 18:59
211 查看
在上一篇总结中我们已经将Spring与Shiro的集成框架搭建起来了,下面就来
简单看一下Shiro的整个工作流程。
之前由于配置在shiroFilter的filterChainDefinitions中配置了一些访问权限:
login.jsp页面。该流程是怎样一回事呢?
回顾我们在测试工程的web.xml中配置的shiroFilter过滤器:
web框架的前端控制器,是安全控制的入口点,其负责读取配置(如ini配置文件),然后判断URL
是否需要登录/权限等操作。
当访问任何路径时,会通过web.xml中配置的shiroFilter的拦截器(拦截机制是所有请求“/*”),
而shiroFilter拦截器会加载配置在Spring配置文件applicationContext.xml中的id同为“shiroFilter”的bean配置,
其中的filterChainDefinitions参数定义了一些页面的访问规则,
通过这些访问规则来对请求进行拦截或放行。
在配置shiroFilter时需要注意一个细节,就是Spring配置文件applicationContext.xml文件中的
shiroFilter配置中的id必须与web.xml中的shiroFilter中的<filter-name>属性一致。
如果不一致的话,会抛出NoSuchBeanDefinitionException异常,这是因为web.xml中的shiroFilter
对应的<filter-class>中的类DelegatingFilterProxy实际上是一个Filter的一个代理对象, 默认情况下,
Spring会到IOC容器中查找和<filter-name>对应的 filter bean(也可以通过targetBeanName 的初始化参数来配置filter bean的id)。\
查看DelegatingFilterProxy源码,其中有这么一段:
用户自己配置有校验规则的实体Filter类,而该Filter类需要通过web.xml中配置的<filter-name>属性(即“TargetBeanName”)在Spring的配置文件applicationContext.xml中获取。
所以一旦DelegatingFilterProxy找不到相关类,代表这个代理对象就是无用的了,后面也无法执行
Shiro的一些校验工作,所以就会抛出NoSuchBeanDefinitionException的异常,提示开发者为该
代理对象配置Filter的实体bean,好让其去代理。
综上所述,Shiro的请求处理整体流程如下图:
转载请注明出处:http://blog.csdn.net/acmman/article/details/78312064
简单看一下Shiro的整个工作流程。
之前由于配置在shiroFilter的filterChainDefinitions中配置了一些访问权限:
<!-- 配置哪些页面需要受保护. 以及访问这些页面需要的权限. 1). anon 可以被匿名访问 2). authc 必须认证(即登录)后才可能访问的页面. --> <property name="filterChainDefinitions"> <value> /login.jsp = anon # everything else requires authentication: /** = authc </value> </property>所以当访问非login.jsp页面以外的页面时(哪怕页面不存在),都会自动跳转回
login.jsp页面。该流程是怎样一回事呢?
回顾我们在测试工程的web.xml中配置的shiroFilter过滤器:
<filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>实际上在web.xml中配置的shiroFilter过滤器是一个入口,它类似于如Struts2/SpringMVC这种
web框架的前端控制器,是安全控制的入口点,其负责读取配置(如ini配置文件),然后判断URL
是否需要登录/权限等操作。
当访问任何路径时,会通过web.xml中配置的shiroFilter的拦截器(拦截机制是所有请求“/*”),
而shiroFilter拦截器会加载配置在Spring配置文件applicationContext.xml中的id同为“shiroFilter”的bean配置,
其中的filterChainDefinitions参数定义了一些页面的访问规则,
通过这些访问规则来对请求进行拦截或放行。
在配置shiroFilter时需要注意一个细节,就是Spring配置文件applicationContext.xml文件中的
shiroFilter配置中的id必须与web.xml中的shiroFilter中的<filter-name>属性一致。
如果不一致的话,会抛出NoSuchBeanDefinitionException异常,这是因为web.xml中的shiroFilter
对应的<filter-class>中的类DelegatingFilterProxy实际上是一个Filter的一个代理对象, 默认情况下,
Spring会到IOC容器中查找和<filter-name>对应的 filter bean(也可以通过targetBeanName 的初始化参数来配置filter bean的id)。\
查看DelegatingFilterProxy源码,其中有这么一段:
protected Filter iniDelegate(WebApplicationContext wac) throws ServletException{ Filter delegate = wac.getBean(getTargetBeanName(),Filter.class); if(){ delegate,init(getFilterConfig()); } }可以看到,DelegatingFilterProxy作为Filter过滤器代理对象,本身是没有过滤机制的,需要加载
用户自己配置有校验规则的实体Filter类,而该Filter类需要通过web.xml中配置的<filter-name>属性(即“TargetBeanName”)在Spring的配置文件applicationContext.xml中获取。
所以一旦DelegatingFilterProxy找不到相关类,代表这个代理对象就是无用的了,后面也无法执行
Shiro的一些校验工作,所以就会抛出NoSuchBeanDefinitionException的异常,提示开发者为该
代理对象配置Filter的实体bean,好让其去代理。
综上所述,Shiro的请求处理整体流程如下图:
转载请注明出处:http://blog.csdn.net/acmman/article/details/78312064
相关文章推荐
- 【Shiro权限管理】7.实现Shiro认证流程
- shiro原理的分析,系统权限管理以及 运行流程分析
- 【Shiro权限管理】15.Shiro授权流程分析
- Spring+SpringMVC+Mybatis+shiro权限登录管理
- Shiro基础学习(一)—权限管理
- spring boot mybatis 整合shiro简单实现登陆权限管理
- Shiro入门2:权限管理入门,用户认证、授权
- springmvc+shiro+maven 实现登录认证与权限授权管理 201
- 【迁移2016-03-28 14:53】Shiro(一):基于资源的权限管理(RBAC)
- Shiro入门9:Shiro授权流程和三种授权方式和权限标识符规则
- 【Shiro权限管理】6.Shiro认证思路分析
- SpringMVC+Spring Data JPA+Shiro+EasyUI简单权限管理系统
- Git 分支---3.3分支的管理---3.4利用分支进行开发的工作流程
- struts用户管理,用户管理教程,用户管理流程讲解,权限管理
- shiro权限管理的一个interceptor
- shiro实现APP、web统一登录认证和权限管理
- SpringBoot+Shiro学习之数据库动态权限管理和Redis缓存
- 【Shiro权限管理】2.Shiro的HelloWorld程序
- shiro教程(1)-基于url权限管理
- 银行IT部门科技管理流程管控工作发展之路