Filter(过滤器)

简介: Filter(过滤器)

过滤器——Filter,它是JavaWeb三大组件之一。另外两个是Servlet和Listener。


它是在2000年发布的Servlet2.3规范中加入的一个接口。是Servlet规范中非常实用的技术。


它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作。


常见应用场景:URL级别的权限控制;过滤敏感词汇;中文乱码问题等等。


过滤器的编写:


@WebFilter(filterName = "FilterDemo2",urlPatterns = "/*")
public class FilterDemo1 implements Filter {
    /**
     * 过滤器的核心方法
     * @param request
     * @param response
     * @param chain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    throws IOException, ServletException {
        /**
         * 如果不写此段代码,控制台会输出两次:FilterDemo1拦截到了请求。
         */
        HttpServletRequest req = (HttpServletRequest) request;
        String requestURI = req.getRequestURI();
        if (requestURI.contains("favicon.ico")) {
            return;
        }
        System.out.println("FilterDemo1拦截到了请求");
    }
}


过滤器 API


Filter


返回类型 方法 简介


void init(FilterConfig conf) 用于执行过滤器的初始化工作,web容器会在web项目启动时自动调用该方法。


void doFilter(ServletRequest request,SerlvetResponse response,FilterChain chain) 当请求和响应被过滤器拦截后,都会交给doFilter来处理:其中两个参数分别是被拦截request和response对象,可以使用chain的doFliter方法来放行。


void destroy() 用于释放关闭Filter对象打开的资源,在web项目关闭时,由web容器自动调用该方法。




FilterConfig



FilterChain



生命周期


出生当应用加载的时候执行实例化和初始化方法。


活着只要应用一直提供服务,对象就一直存在。


死亡当应用卸载时,或者服务器宕机时,对象消亡。


Filter的实例对象在内存中也只有一份。所以也是单例的。


过滤器核心方法的细节


/**
 * 过滤器的核心方法
 */
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    /**
     * 如果不写此段代码,控制台会输出两次:FilterDemo1拦截到了请求。
    HttpServletRequest req = (HttpServletRequest) request;
    String requestURI = req.getRequestURI();
    if (requestURI.contains("favicon.ico")) {
        return;
    }*/
    System.out.println("FilterDemo1拦截到了请求");
    //过滤器放行
    chain.doFilter(request, response);
    System.out.println("FilterDemo1放行之后,又回到了doFilter方法");
}


测试运行结果,我们发现过滤器放行之后执行完目标资源,仍会回到过滤器中:



多个过滤器执行顺序


运行结果


相关文章
|
6月前
|
Java API 容器
Filter 过滤器实现
JavaWeb 组件 Servlet 提供了 Filter 过滤功能,其功能是对目标资源的请求和响应进行拦截,对拦截到的请求和响应做出特殊的功能处理,比如我们请求中有一些敏感信息过滤就是利用过滤器过滤。
|
应用服务中间件
15-Filter 过滤器2
15-Filter 过滤器2
78 0
|
6月前
javaWeb过滤器Filter(二)
javaWeb过滤器Filter(二)
|
6月前
|
JavaScript 前端开发
filter() 方法使用
filter() 方法使用
44 0
|
Java 应用服务中间件 Spring
@RefreshScope和过滤器Filter不要这样用
在注册自定义的OncePerRequestFilter所在的类上加了@RefreshScope导致自定义的OncePerRequestFilter不会被注册到上下文。
|
Java
15-Filter 过滤器1
15-Filter 过滤器1
96 0
|
设计模式 监控 搜索推荐
过滤器模式(Filter Pattern)
过滤器模式(Filter Pattern)是一种结构型设计模式,它通过一系列条件来过滤集合中的对象,并返回符合条件的对象子集。
129 0
|
Java 应用服务中间件
Filter过滤器
Filter过滤器
Filter过滤器
|
API 容器
Filter过滤器的简单介绍与使用
Filter过滤器的简单介绍与使用
159 0
Filter过滤器的简单介绍与使用
|
数据处理
javaweb Filter过滤器
javaweb Filter过滤器
javaweb Filter过滤器