辰景青岛网站建设,三明 网站建设,兰州装饰公司十强,免费网站建设网站优化软件过滤器#xff08;Filter#xff09;
1. 基本概念
过滤器#xff08;Filter#xff09;是拦截 Request 请求的对象#xff1a;在用户的请求访问资源前处理 ServletRequest 和 ServletResponse 。
Filter 相关的接口有#xff1a;Filter、FilterConfig、FilterChain 。…过滤器Filter
1. 基本概念
过滤器Filter是拦截 Request 请求的对象在用户的请求访问资源前处理 ServletRequest 和 ServletResponse 。
Filter 相关的接口有Filter、FilterConfig、FilterChain 。
Filter 的实现必须实现 Filter 接口。这个接口包含了 Filter 的3个生命周期方法init()、doFilter()、destroy() 。
Servlet 容器Tomcat初始化Filter时会触发 Filter 的 init() 方法一般来说是在应用开始时注意不是第一次使用时。这个方法只会被调用一次。
FilterConfig 对象由 Servlet 容器传入 init() 方法中。
当 Servlet 容器每次处理 Filter 相关的资源时都会调用该 Filter 实例的 doFilter() 方法。就像容器调用 Serviet 的 service() 方法。
在 Filter 的 doFilter() 方法中最后一行需要调用 FilterChain 中的 doChain() 方法。注意FilterChain 是 doFilter() 方法的第三个参数。
一个 URL 资源可能被多个 Filter 关联即一条 Filter 链这时 Filter.doFilter() 的方法将触发 Filter 链中下一个 Filter。只有在 Filter 链中最后一个 Filter 里调用 doFilter() 方法才会触发 Controller 中处理 URL 资源的方法。
如果在 Filter 的 doFilter() 方法中因为故意或无意没有调用 FilterChain 的 doFilter() 方法那么这个 Request 请求将终止后面的处理就会中断。
注意FilterChain 接口中唯一的方法就是 doFilter() 方法它和 Filter 接口中的 doFilter() 方法定义是不一样的。
Filter 接口中最后一个方法是 destroy()该方法在 Servlet 容器要销毁 Filter 时触发。
类似于 ServletFilter 也是单例。
2. Filter 的配置
和 Servlet 的配置非常相似Filter 的配置主要有三方面 确认哪些资源需要本 Filter 进行拦截处理。配置 Filter 的初始化参数和值这些参数在 Filter 的 init() 方法中可以读取到。给 Filter 取一个名称一般来说这个配置是不需要的。在一些特殊的情况下系统通过这个名字来识别Filter。 WebFilter(filterName firstFilter,urlPatterns {/*},initParams {WebInitParam(name, value),WebInitParam(name, value)})
public class FirstFilter implements Filter {...
}filterfilter-namefirstFilter/filter-namefilter-classcom.hemiao.filter.FirstFilter/filter-classinit-paramparam-nameauthor/param-nameparam-valueben/param-value/init-paraminit-paramparam-nameemail/param-nameparam-valuehemiao3000126.com/param-value/init-param
/filter
filter-mappingfilter-namefirstFilter/filter-nameurl-pattern/*/url-pattern
/filter-mapping