2019独角兽企业重金招聘Python工程师标准>>>

全文内容转载至spring DelegatingFilterProxy,targetFilterLifecycle的作用 ,我重新整理一下文章的结构

今天在看SHIRO的时候,看到佟刚老师用了DelegatingFilterProxy类,并使用了targetFilterLifecycle和targetBeanName属性,到网上找到了GOODDEEP先生的文章,受用很大。

概要:

DelegatingFilterProxy类不是针对SHIRO出现的,是SHIRO的org.apache.shiro.spring.web.ShiroFilterFactoryBean 使用到了SPRING这个类提供功能。这个类使SPRING容器中的BEAN可以在WEB.XML中配置为FILTER,并生效。这样一来及起到了过滤URL请求作用,又可以访问SPRING容器中其他的BEAN提供的丰富功能。

详情:

使用两种配置比较说明DelegatingFilterProxy配置的区别:

配置一:

在web.xml中增加如下内容:

<filter><filter-name>permissionFilter</filter-name><filter-class>com.taobao.riskm.filter.PermissionFilter</filter-class>
</filter>
<filter-mapping><filter-name>permissionFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

由filter和filter-mapping构成。filter指定过滤器处理类(实现了Filter接口),filter-mapping指定过滤的规则

配置二:

在web.xml中增加如下内容:

<filter><filter-name>permission</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>permission</filter-name><url-pattern>*.htm</url-pattern>
</filter-mapping>

在spring bean配置中加入:

<bean id="permission" class="com.taobao.kfc.kwb.web.permission.PermissionHttpServlet"></bean>

DelegatingFilterProxy类是一个代理类,所有的请求都会首先发到这个filter代理,然后再按照"filter-name"委派到spring中的这个bean

 protected void invokeDelegate(Filter delegate, ServletRequest request, ServletResponse response, FilterChain filterChain)throws ServletException, IOException {delegate.doFilter(request, response, filterChain);}

delegate为org.apache.shiro.spring.web.ShiroFilterFactoryBean

配置二和配置一最大的不同是,配置一是一个filter,优先被加载到container中,无法调用spring中后续的bean;而配置二是一个spring bean,可以引用其他的bean,而请求都通过DelegatingFilterProxy类委派给B,具体实现为:

"targetFilterLifecycle":spring bean实现了Filter接口,但默认情况下,是由spring容器来管理其生命周期的(不是由tomcat这种服务器容器来管理)。如果设置"targetFilterLifecycle"为True,则spring来管理Filter.init()和Filter.destroy();若为false,则这两个方法失效!!

“targetBeanName”:用来指定Spring配置文件中的beanName,就不再要求Spring配置文件中的beanName和web.xml中的filte-name一致了。

<filter><filter-name>permission</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class><init-param><param-name>targetBeanName</param-name><param-value>Spring-bean-name</param-value></init-param>
</filter>

另外:Filter和servlet都可以对URL进行处理,Filter是一个链式处理,只要你想继续处理就可以传递下去;而Servlet则是一次处理并返回,适合简单逻辑处理。filter就像"递归",在web.xml配置中的顺序代表了filter的调用流程,而servlet被调用后不会继续调用其他的servlet!因此配置中的顺序不影响!

转载于:https://my.oschina.net/u/3049601/blog/1605353

DelegatingFilterProxy详解相关推荐

  1. (转) shiro权限框架详解06-shiro与web项目整合(上)

    http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springM ...

  2. CORS跨域资源共享(二):详解Spring MVC对CORS支持的相关类和API【享学Spring MVC】

    每篇一句 重构一时爽,一直重构一直爽.但出了问题火葬场 前言 上篇文章通过我模拟的跨域请求实例和结果分析,相信小伙伴们都已经80%的掌握了CORS到底是怎么一回事以及如何使用它.由于Java语言中的w ...

  3. SpringSecurity登录流程详解

    前置准备 使用SpringSecurity框架之前,需要自定义配置类SecurityConfig,该配置类继承自WebSecurityConfigurerAdapter 在 Spring Securi ...

  4. Spring和Security整合详解

    Spring和Security整合详解 一.官方主页 Spring Security 二.概述 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Sp ...

  5. Spring+SpringMVC+Mybatis SSM框架详解

    一.JDBC编程 1.JDBC 简介 JDBC其实就是 Java 官方提供的一套规范(接口),用于帮助开发人员快速实现不同关系型数据库的连接. 程序运行的时候,数据都是在内存中的.当程序终止的时候,通 ...

  6. Spring和Spring Mvc整合详解

    Spring和Spring Mvc整合详解 官方主页 Spring Spring Mvc SpringMvc 5,可以参考这一篇<Spring和Spring Mvc 5整合详解> 概述 S ...

  7. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  8. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  9. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  10. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

最新文章

  1. spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码
  2. 多平台、高颜值的网易云第三方播放器
  3. unix executable file
  4. 如何解决大量字段的录入交互界面的设计呢?
  5. 滑动窗口—满足XX条件的最长子串
  6. Java冒泡实现类Collections.sort()
  7. 计算机二级ppt为客户制作演示文稿,计算机二级ppt真题:制作介绍北京ppt
  8. Coder-Strike 2014 - Finals (online edition, Div. 2) A. Pasha and Hamsters
  9. 20175223 MySQL
  10. Linux C高级编程——时间编程
  11. BZOJ 2754: [SCOI2012]喵星球上的点名
  12. springboot开启声明式事务
  13. {{jQuery源码分析}}jQuery对象初始化的多种传参数形式
  14. 飞利浦 f718 java 微信_第一次使用飞利浦F718手机感觉怎么样及优缺点
  15. Baxer双臂机器人Ubuntu20.04+ROS noetic开发环境配置
  16. use glyphs icons
  17. Mac桌面壁纸文件如何提取里面的壁纸图片?heic动态桌面壁纸怎么导出jpg的图片形式?
  18. (FJWC2020)DTOJ 4688. 迫害 DJ
  19. 学习日语应该先掌握哪些内容?
  20. GhostXP_SP2电脑公司特别版_v7.8[修正版]

热门文章

  1. 名企面试官精讲典型编程题之C++篇
  2. RAC架构之业务分割
  3. PyTorch:tensor-数据处理
  4. Scala:函数式编程之下划线underscore
  5. Sympy符号计算库
  6. android Toast五种特效
  7. mysql加服务器命令_mysql服务器常用命令
  8. linux截图工具shutter 下载,在Ubuntu 19.04系统中安装Shutter截图工具的方法,附删除的方法...
  9. 墙面有几种装修方法_新家装修时,家里墙面漏水了怎么办?三种方法解决不乱花钱...
  10. 力扣-33 搜索旋转排序数组