河南省建设培训中心网站,景德镇网站建设公司,17做网站官网,铜陵网站建设费用targetFilterLifecycle的作用#xff0c;有需要的朋友可以参考下。 在web.xml中进行配置#xff0c;对所有的URL请求进行过滤#xff0c;就像击鼓传花一样#xff0c;链式处理。 配置分为两种A和B。 A:普通配置 在web.xml中增加如下内容#xff1a;fi… targetFilterLifecycle的作用有需要的朋友可以参考下。 在web.xml中进行配置对所有的URL请求进行过滤就像击鼓传花一样链式处理。 配置分为两种A和B。 A:普通配置 在web.xml中增加如下内容 filter filter-namepermissionFilter/filter-name filter-classcom.taobao.riskm.filter.PermissionFilter/filter-class /filter filter-mapping filter-namepermissionFilter/filter-name url-pattern/*/url-pattern /filter-mapping 由filter和filter-mapping构成。filter指定过滤器处理类(实现了Filter接口)filter-mapping指定过滤的规则。B:高级配置(允许代理注入Spring bean) 在web.xml中增加如下内容 filter filter-namepermission/filter-name filter-classorg.springframework.web.filter.DelegatingFilterProxy/filter-class init-param param-nametargetFilterLifecycle/param-name param-valuetrue/param-value /init-param /filter filter-mapping filter-namepermission/filter-name url-pattern*.htm/url-pattern /filter-mapping 在spring bean配置中加入 bean idpermission classcom.taobao.kfc.kwb.web.permission.PermissionHttpServlet/bean 因为filter比bean先加载也就是spring会先加载filter指定的类到container中这样filter中注入的spring bean就为null了。 解决办法 先filter中加入DelegatingFilterProxy类targetFilterLifecycle指明作用于filter的所有生命周期。 原理是DelegatingFilterProxy类是一个代理类所有的请求都会首先发到这个filter代理然后再按照filter-name委派到spring中的这个bean。 在Spring中配置的bean的name要和web.xml中的filter-name一样. 此外spring bean实现了Filter接口但默认情况下是由spring容器来管理其生命周期的(不是由tomcat这种服务器容器来管理)。如果设置targetFilterLifecycle为True则spring来管理Filter.init()和Filter.destroy()若为false则这两个方法失效 B和A最大的不同是A是一个filter优先被加载到container中无法调用spring中后续的bean而B是一个spring bean可以引用其他的bean而请求都通过DelegatingFilterProxy类委派给B B的另外一种配置方式 filter filter-namepermission/filter-name filter-classorg.springframework.web.filter.DelegatingFilterProxy/filter-class init-param param-nametargetBeanName/param-name param-valueSpring-bean-name/param-value /init-param /filter 也就是增加一个targetBeanName的参数值为实际执行Filter的bean。 注意Filter和servlet都可以对URL进行处理Filter是一个链式处理只要你想继续处理就可以传递下去而Servlet则是一次处理并返回适合简单逻辑处理。 附录 url-pattern可以选择以下几种形式 /* 所有资源 *.html 以html结尾的资源 /fold/* 指定目录 /abc.html 指定文件 以”/’开头和以”/*”结尾的是用来做路径映射的, 以前缀”*.”开头的是用来做扩展映射的。 为什么定义”/*.action”这样一个看起来很正常的匹配会错 因为这个匹配即属于路径映射也属于扩展映射导致容器无法判断。
此外filter就像递归在web.xml配置中的顺序代表了filter的调用流程而servlet被调用后不会继续调用其他的servlet因此配置中的顺序不影响