过滤器

作者: 旦暮何枯 | 来源:发表于2019-03-19 16:42 被阅读0次

过滤器 Filter

用于对用户请求进行预处理,和对请求响应进行后处理的 web 应用组件。

过滤源:请求与响应
过滤规则:自定义过滤规则

过滤器工作原理

image.png

过滤器的应用场景

  • 用户认证
  • 编解码处理
  • 请求数据压缩处理

过滤器生命周期

过滤器的生成和销毁由 servlet 容器负责。

1.web-app 启动时,根据部署描述符的设置,创建 过滤器的实例对象,进行初始化。

在部署描述符中(web.xml),可对 filter 进行配置。 <filter-config>
2.过滤操作, dofilter 方法;

  1. web-app 被移除,或服务器被停用;执行 destroy 方法。

过滤器的创建

新建类继承 Filter 类,实现 Filter 类的 init, doFilter, destroy 方法。
过滤器的创建和 servlet 差不多;都需要在 部署描述符(web.xml)中进行注册,配置:

web.xml 注册 filter

    <filter>
        <filter-name>FilterTest</filter-name>
        <filter-class>FilterTest</filter-class>
        <init-param>
            <param-name>filterParam</param-name>
            <param-value>111</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>FilterTest</filter-name>
        <url-pattern>/hello/world/*</url-pattern>
    </filter-mapping>

java 创建 Filter 类:

该 Filter 的作用是检查用户是否已经登录;若登录,跳转到 /hello/world 目录下
否则跳转 index.html 页面

public class FilterTest implements Filter {
    public void destroy() {
    }

    public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {
        System.out.println("filter doFilter method");
        HttpServletRequest request = (HttpServletRequest) req;
        HttpSession session = ((HttpServletRequest) req).getSession();
        if (session.getAttribute("userName") == null ){
            HttpServletResponse response = (HttpServletResponse) resp;
            response.sendRedirect("../index.html");
        } else {
            chain.doFilter(req,resp);
        }
    }

    public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {
        System.out.println("filter init method");
        String value = config.getInitParameter("filterParam");
        System.out.println("filter config param: " + value);
    }

}

过滤器链

由多个过滤器组成。
请求按照在部署描述符中注册的先后顺序进行请求的过滤。

1.当第一个过滤器的 doFilter 方法被调用的时候,servlet 容器创建一个代表 filter链的 filterChain 对象传递给该方法。
2.在 doFilter 方法中如果开发调用了 filterChain 中的 doFilter 方法,servlet 容器会检查 filterchain 中是否还存在其他的 filter;若存在,继续调用 filter 方法;
3.若不存在其他的 filter, servlet 会调用对应的目标资源;即最后一个 filter 方法请求的 servlet 资源对象。

项目地址:https://github.com/wengfe/JAVA/tree/master/flitertest

相关文章

  • VUE过滤器和计算属性

    过滤器主要分为全局过滤器和局部过滤器。 全局过滤器如下: 局部过滤器如下: 计算属性如下: 过滤器中获取日期: 计...

  • 自定义过滤器的封装

    封装自定义过滤器 引入过滤器 添加+注册过滤器 使用过滤器

  • vue的过滤器及计算属性

    1,过滤器:让要显示在页面上的内容进行重新筛选2,过滤器分为全局过滤器和局部过滤器全局过滤器: 局部过滤器: 3,...

  • 2018-09-18 vue初学六(过滤器:filter(fil

    1.1过滤器 过滤器分为两种:1、全局过滤器:filter2、局部过滤器:filters 1.2过滤器 (当前时间...

  • 过滤器

    ...过滤器分为全局过滤器和局部过滤器全局过滤器的格式:html:{{数据,全局过滤器的名字}}//解析数据js:...

  • 六、过滤器的使用 ------ 2020-05-07

    1、过滤器的作用: 2、全局过滤器 3、局部过滤器 4、过滤器的使用

  • 过滤器和计算属性

    1、过滤器 过滤器指让要显示在页面上的内容进行重新筛选。 过滤器分为两种:全局过滤器、局部过滤器。 2、全局过滤器...

  • Vue的节点

    过滤器Filters 过滤器函数,必须定义在filters节点之下,过滤器本质是函数 分为私有过滤器和全局过滤器 ...

  • Vue进阶(1)

    一.过滤器 过滤器分为局部过滤器和全局过滤器 1.局部过滤器 格式 2.全局过滤器 格式 练习 1.当数字为小于1...

  • 不锈钢锥形过滤器@管道锥形过滤器@冲孔进水口过滤器

    不锈钢锥形过滤器@管道锥形过滤器@冲孔进水口过滤器 产品介绍:临时过滤器又称锥型过滤器,属于管道粗过滤器系列最简单...

网友评论

      本文标题:过滤器

      本文链接:https://www.haomeiwen.com/subject/pelnmqtx.html