过滤器

介绍
Filter
即为过滤,用于在
Servlet
之外对
Request
或者
Response
进行修改。它主要用于对用户请求 进行预处理,也可以对 HttpServletResponse
进行后处理。使用
Filter
的完整流程:
Filter
对用户请求 进行预处理,接着将请求交给 Servlet
进行处理并生成响应,最后
Filter
再 对服务器响应进行后处理。 在一个 web
应用中,可以开发编写多个
Filter
,这些
Filter
组合 起来称之为一个
Filter
链。

在
HttpServletRequest
到达
Servlet
之前,拦截客户的
HttpServletRequest
。根据需要检查
HttpServletRequest
,也可以修改
HttpServletRequest
头和数据。
在
HttpServletResponse
到达客户端之前,拦截
HttpServletResponse
。根据需要检查
HttpServletResponse
,也可以修改
HttpServletResponse
头和数据。
实现 :
可以通过实现一个叫做
javax.servlet.Fileter
的接口来实现一个过滤器,其中定义了 三个方法,
init(),
doFilter(), destroy()
分别在相应的时机执行。后期观察生命周期。
Filter
的实现只需要两步:
Step1:
编写
java
类实现
Filter
接口,并实现其
doFilter
方法。
Step2:
通过
@WebFilter
注解设置它所能拦截的资源。
@WebFilter
(
"/*"
)
public class
Filter01
implements
Filter
{
@Override
public
void
init
(
FilterConfig filterConfig
)
throws
ServletException
{
}
@Override
public
void
doFilter
(
ServletRequest servletRequest
,
ServletResponse
servletResponse
,
FilterChain filterChain
)
throws
IOException
,
ServletException
{
}
@Override
public
void
destroy
() {
}
}
Filter
接口中有一个
doFilter
方法,当开发人员编写好
Filter
,并配置对哪个
web
资源进行拦截后, Web 服务器每次在调用
web
资源的
service
方法之前,都会先调用一下
filter
的
doFilter
方法。因此可以达到如下效果:
调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问 web
资源)。
web
服务器在调用
doFilter
方法时,会传递一个
filterChain
对象进来,
filterChain
对象是
filter
接口 中最重要的一个对象,它提供了一个 doFilter
方法,开发人员可以根据需求决定 是否调用此方法,调用该方法,则 web
服务器就会调用
web
资源的
service
方法,即
web
资源就会被访问,否则
web
资源不会被访问。(本质是放行,调用doFilter
方法后,即请求可以到达资源)
