Java——Filter过滤器的简介

一切如你i 码农一号 2022-10-31 18:14:22

一、Filter:简介

目标

  • 了解过滤器的作用

讲解

1. 什么是过滤器

  • Filter:是Servlet规范提供的一项技术,是一个接口:javax.servlet.Filter
    • Servlet规范提供了三项技术:
      • Servlet技术
      • Filter技术
      • Listener技术
  • 作用:可以在请求到达目标资源之前,先拦截下来进行预处理;还可以在目标资源返回响应之前,处理响应之后,再放行到客户端

2. 过滤器的使用场景

  • 敏感词过滤
  • 统一乱码解决
  • IP黑名单
  • 权限过滤

小结

二、Filter:入门【重点】

目标

  • 能够编写Filter【重点】
  • 理解Filter的运行原理

讲解

1. 步骤

复习Servlet入门步骤:

  1. 创建Java类,实现Servlet接口
  2. 重写接口的方法。共5个方法,了解3个,重点service方法
  3. 在类上加注解@WebServlet,配置这个Servlet的访问路径

创建一个Filter的步骤:

  1. 创建Java类,实现javax.servlet.Filter接口
  2. 重写接口的方法。Filter接口共3个方法,重点关注doFilter方法
  3. 在类上加注解@WebFilter,配置Filter拦截范围

2. 示例

2.1 准备一个目标资源
package com.demo.target;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet(urlPatterns="/target")
public class TargetServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("/target.....");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
2.2 创建过滤器
package com.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 1. 创建Java类,实现javax.servlet.Filter接口
 * 2. 重写接口的方法,重点doFilter方法
 * 3. 在类上添加注解@WebFilter,配置拦截范围
 */
@WebFilter("/*")
public class Demo01StartFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("A");

        //放行(调用执行后续的资源)
        chain.doFilter(request, response);

        System.out.println("B");
    }

    @Override
    public void destroy() {

    }
}
package com.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;


@WebFilter("/*")
public class Demo02StartFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("C");
        chain.doFilter(request, response);
        System.out.println("D");
    }

    @Override
    public void destroy() {

    }
}
2.3 测试效果

打开浏览器输入地址 http://localhost:8080/day09/target%EF%BC%8C%E4%B8%A4%E4%B8%AA%E8%BF%87%E6%BB%A4%E5%99%A8%E9%83%BD%E4%BC%9A%E6%8B%A6%E6%88%AA%E5%88%B0%E6%9C%AC%E6%AC%A1%E8%AF%B7%E6%B1%82

3. 原理(运行过程)

  • 客户端的请求:首先会被Tomcat交给过滤器进行过滤;放行之后才会到达目标资源
  • 在目标资源里得到的request、response:是前边过滤器处理过的,不是第一手的
  • 如果过滤器里不放行,请求就不能到达目标资源

小结

  1. 创建一个Java类,实现javax.servlet.Filter接口
  2. 重写接口的方法。共3个,重点doFilter方法
  3. 在类上加注解@WebFilter,配置拦截范围
...全文
353 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

7,005

社区成员

发帖
与我相关
我的任务
社区描述
阿丹的社区,分享工作日常,和业务技能点,认真写好每一篇文章,共同探讨,共同进步,成就一亿技术人,欢迎大家加入。
htmljavaidea 个人社区 北京·海淀区
社区管理员
  • 一切如你i
  • scdn_wyy
  • 孙阿哈
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

在这里,你可以:

  1. 看到大家丰富多彩的业务多样性。
  2. 浏览各大网站的精彩推荐和分享。
  3. 得到社区最好的资源。
  4. 参与更好的进行社区运营的交流和互动。

 

欢迎你入住阿丹社区云,开始打造属于你的技术社区。

试试用AI创作助手写篇文章吧