Filter过滤器(Filter filter)-其他
Filter过滤器(Filter filter)
1、过滤器三要素
- 拦截:一个请求必须先把它拦住,才能做后续处理
- 过滤:预设的检查条件,满足条件才可以放行
- 放行:对于满足要求的请求,放它过去,让它原本要访问什么资源就继续还是访问那个资源
2、过滤器生命周期
生命周期环节 | 调用的方法 | 时机 | 次数 |
---|---|---|---|
创建对象 | 无参构造器 | 默认:Web应用启动时 | 一次 |
初始化 | init(FilterConfig filterConfig) | 创建对象后 | 一次 |
处理请求 | doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
接收到请求后 | 多次 |
清理操作 | destroy() | Web应用卸载之前 | 一次 |
3、拦截请求时的匹配规则
- 精确匹配
Target01Filter
/Target01Servlet
<!-- 配置Filter要拦截的目标资源 -->
<filter-mapping>
<!-- 指定这个mapping对应的Filter名称 -->
<filter-name>Target01Filter</filter-name>
<!-- 通过请求地址模式来设置要拦截的资源 -->
<url-pattern>/Target01Servlet</url-pattern>
</filter-mapping>
- 模糊匹配★
前杠后星:/user/*
Target02Filter
/user/*
前星后缀:*.html
Target04Filter
com.atguigu.filter.filter.Target04Filter
Target04Filter
*.png
- 前杠后星:/user/*
Target02Filter
/user/*
<filter-mapping>
<filter-name>Target02Filter</filter-name>
<!-- 模糊匹配:前杠后星 -->
<!--
/user/Target02Servlet
/user/Target03Servlet
/user/Target04Servlet
-->
<url-pattern>/user/*</url-pattern>
</filter-mapping>
- 前星后缀:*.html
Target04Filter
com.atguigu.filter.filter.Target04Filter
Target04Filter
*.png
<filter>
<filter-name>Target04Filter</filter-name>
<filter-class>com.atguigu.filter.filter.Target04Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Target04Filter</filter-name>
<url-pattern>*.png</url-pattern>
</filter-mapping>
- 根据Servlet名称匹配
4、Filter链
- 概念:拦截同一资源的多个Filter
- 执行顺序:由web.xml中filter-mapping配置的顺序决定
- chain.doFilter(requset,response):将请求放行到Filter链中的一下一个Filter,如果当前Filter已经是最后一个了,那么直接放行这个请求去访问原本要访问的资源
————————
1. Three elements of filter
- Intercept: a request must be blocked before subsequent processing
- Filter: the preset inspection conditions are met before release
- Release: for a request that meets the requirements, let it go and let it continue to access what resource it originally intended to access or access that resource
2. Filter life cycle
生命周期环节 | 调用的方法 | 时机 | 次数 |
---|---|---|---|
创建对象 | 无参构造器 | 默认:Web应用启动时 | 一次 |
初始化 | init(FilterConfig filterConfig) | 创建对象后 | 一次 |
处理请求 | doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
接收到请求后 | 多次 |
清理操作 | destroy() | Web应用卸载之前 | 一次 |
3. Matching rules when intercepting requests
- 精确匹配
Target01Filter
/Target01Servlet
<!-- 配置Filter要拦截的目标资源 -->
<filter-mapping>
<!-- 指定这个mapping对应的Filter名称 -->
<filter-name>Target01Filter</filter-name>
<!-- 通过请求地址模式来设置要拦截的资源 -->
<url-pattern>/Target01Servlet</url-pattern>
</filter-mapping>
- 模糊匹配★
前杠后星:/user/*
Target02Filter
/user/*
前星后缀:*.html
Target04Filter
com.atguigu.filter.filter.Target04Filter
Target04Filter
*.png
- 前杠后星:/user/*
Target02Filter
/user/*
<filter-mapping>
<filter-name>Target02Filter</filter-name>
<!-- 模糊匹配:前杠后星 -->
<!--
/user/Target02Servlet
/user/Target03Servlet
/user/Target04Servlet
-->
<url-pattern>/user/*</url-pattern>
</filter-mapping>
- 前星后缀:*.html
Target04Filter
com.atguigu.filter.filter.Target04Filter
Target04Filter
*.png
<filter>
<filter-name>Target04Filter</filter-name>
<filter-class>com.atguigu.filter.filter.Target04Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Target04Filter</filter-name>
<url-pattern>*.png</url-pattern>
</filter-mapping>
- 根据Servlet名称匹配
4、Filter链
- Concept: intercept multiple filters of the same resource
- 执行顺序:由web.xml中filter-mapping配置的顺序决定
- chain. Dofilter (requset, response): release the request to the next filter in the filter chain. If the current filter is the last one, directly release the request to access the resources to be accessed