Filter过滤器的简单介绍与使用

简介: Filter过滤器的简单介绍与使用

Filter过滤器

开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。见下图:

f87176e0d89b9ab31e468902ce92e0c.png

简单的说,过滤器可以针对请求和响应过程中的一些操作进行代码逻辑的判断,只要针对特定的请求和响应配置了过滤器,那么在这些请求和响应过程中都会经过过滤器,也就是说我们可以将一些在请求和响应过程中要进行的公共代码逻辑写在过滤器中

过滤器实现:

普通类实现Filter接口

在web.xml中配置或者使用注解配置【@WebFilter(“过滤器路径”)不推荐】

public class FirstFilter implements Filter {
public FirstFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println(“请求”);
chain.doFilter(request, response);
System.out.println(“响应1”);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}

web.xml配置

first

cn.itsource.filter.FirstFilter

first

/index.jsp    

注解

@WebFilter("/*")
public class FirstFilter implements Filter {
public FirstFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println(“请求”);
chain.doFilter(request, response);
System.out.println(“响应1”);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}

注意:在过滤器中的url-pattern代表的是要去过滤的访问路径

生命周期

创建->初始化->执行[每次请求/响应都执行]->销毁(服务器正常关闭时)

Filter接口

void init(FilterConfig config)

初始化过滤器,在服务器启动时就执行

void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

配置过滤器之后,每次请求和访问经过过滤器时都会执行的方法

void destroy()

07c7a824091b765c22067faf70fe197.png滤器关闭时执行


FilterConfig

servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器。

API

String getFilterName()

返回此过滤器的过滤器名称

String getInitParameter(String name)

返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null

Enumeration getInitParameterNames()

以 String 对象的 Enumeration 的形式返回过滤器初始化参数的名称,如果过滤器没有初始化参数,则返回一个空的 Enumeration。

ServletContext getServletContext()

返回对调用者在其中执行操作的 ServletContext 的引用。

e0784843d28f87ad43dd8e4116cc252.png

f92a5d19b0c54410402034d90b29302.png

过滤器链

0f48d8c8ee06dac319c784dac5dadb9.png

过滤器链是多个过滤器的统称,过滤器链中的过滤器的执行的顺序与的配置顺序有关。我们在访问最终的资源的时候会经过这一组过滤器,在返回的时候还会经过这一组过滤器。

因为过滤器链是由多组过滤器组成,那么在一个过滤器执行完毕需要执行下一个过滤器的时候,需要上一个过滤器有一个放行操作【chain.doFilter(req, resp)】,这样紧跟着的过滤器才能执行

注意:放行前的代码在请求时执行,放行后的代码在响应时执行

66600af16ce594760713f36240c5451.png

f91f0a70d66f7f53fb5c9dd88454665.png

943c523a3c061f150245b7b56eb4d0c.png

3493b0868d56e75e8d411ae1d965c85.png

3dc287a9ee14df6df817f1d9c7b92a6.png

83520a2b53dee8c70ec3061f475392d.png

注意:过滤器链执行顺序与的配置顺序有关,见下图:

546836f2076832e6e701ce77f1c0f65.png


过滤器过滤配置

过滤器默认只拦截一次请求级别,实际上过滤器将过滤的请求情况分为四类,分别是:

request【请求】、redirect【重定向】、include【包含】、error【错误】

要针对以上的分类进行请求过滤,需要在的节点中配置上对应的情况,如下的配置:

REQUEST    :默认值.

FORWARD    :转发.

INCLUDE    :包含.

ERROR    :错误页面跳转.(全局错误页面)

请求转发

156c9e6b30190d723dc20181fbb71f0.png

141f7b3174c90a813a7525d753fade5.png

53c5d9271417b74c4a751d4a4785a6e.png

3833e7208b9dc94a90e4cc4bbb6d713.png

请求重定向

cced55c2c425405c50e78d99682c010.png

7be69991287041893b811b02c6893d3.png

---------------------

目录
相关文章
|
2月前
|
Java API 容器
Filter 过滤器实现
JavaWeb 组件 Servlet 提供了 Filter 过滤功能,其功能是对目标资源的请求和响应进行拦截,对拦截到的请求和响应做出特殊的功能处理,比如我们请求中有一些敏感信息过滤就是利用过滤器过滤。
|
11月前
|
应用服务中间件
15-Filter 过滤器2
15-Filter 过滤器2
58 0
|
2月前
|
JavaScript 前端开发
filter() 方法使用
filter() 方法使用
22 0
|
10月前
|
Java 应用服务中间件 Spring
@RefreshScope和过滤器Filter不要这样用
在注册自定义的OncePerRequestFilter所在的类上加了@RefreshScope导致自定义的OncePerRequestFilter不会被注册到上下文。
|
11月前
|
Java
15-Filter 过滤器1
15-Filter 过滤器1
74 0
|
11月前
|
设计模式 监控 搜索推荐
过滤器模式(Filter Pattern)
过滤器模式(Filter Pattern)是一种结构型设计模式,它通过一系列条件来过滤集合中的对象,并返回符合条件的对象子集。
96 0
|
API 数据安全/隐私保护 容器
Filter(过滤器)
Filter(过滤器)
|
Java 应用服务中间件
Filter过滤器
Filter过滤器
Filter过滤器
|
Java 开发者
使用filter-mapping控制多个Filter的执行顺序| 学习笔记
快速学习使用filter-mapping控制多个Filter的执行顺序。
206 0
使用filter-mapping控制多个Filter的执行顺序| 学习笔记
|
应用服务中间件
filter 过滤器
Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig 类,这里包含了 Filter 配置文件的配置信息。
filter 过滤器