Spring Boot 实战(二):Filter过滤器

概述

Filter是依赖于Servlet容器,属于Servlet规范的一部分,Filter的执行由Servlet容器回调完成,Filter的生命周期由Servlet容器管理。他实际的效果就是当请求来的时候经先做一些事情再到service,请求返回的时候也先做一些事情,最后返回给客户端。整体的流程大概是下边这个样子:
在这里插入图片描述

2 实战

2.1 版本声明

运行环境声明:

  • JDK 1.8
  • SprintBoot 2.6.2
  • IntelliJ IDEA 2021.1.3 x64

2.2 目录展示

下边是我们的项目目录,用红框圈出的是我们要进行改动或者创建的文件。注意图中的FilterConfig类是过滤器的另外一种配置方式这里我们不使用,而是使用注解的方式。
在这里插入图片描述

2.3 创建controller类

关于controller类的创建也就是 HelloWorldController.java 文件的内容,和上一篇文章的一样大家可以直接复制过来:
实战篇:用 Junit 对 Controller 类进行单元测试(MockMvc详细注释)

2.4 创建过滤器类

接下来是主要的过滤器内容的书写,代码部分我加入了详细的注释大家可以对照着看一遍。这里我们写了两个过滤器。
首先是LogFilter01.java 文件:

package com.example.springboot01.utils;

import javax.servlet.*;
import javax.servlet.FilterConfig;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
// 配置注解,urlPatterns参数代表针对哪些请求要进行过滤;filterName参数为过滤器的名字,并且会按照命名进行排序,决定请求先过哪个过滤器
@WebFilter(urlPatterns = "/*", filterName = "logFilter01")
// 实现Filter接口
public class LogFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    	// 请求到service前要干的一些事情
        System.out.println("请求来了,我是Filter01!");
		// 过滤链,传给写一个过滤器,或者没有下一个过滤器时,直接交给对应的service
        filterChain.doFilter(servletRequest,servletResponse);
        // 请求响应返回给客户端前要执行的一些事情
        System.out.println("请求结束了,我是Filter01!");
    }

    @Override
    public void destroy() {

    }
}

接下来是LogFilter01.java文件:

package com.example.springboot01.utils;

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

// 配置注解,urlPatterns参数代表针对哪些请求要进行过滤;filterName参数为过滤器的名字,并且会按照命名进行排序,决定请求先过哪个过滤器
@WebFilter(urlPatterns = "/*", filterName = "logFilter02")
public class LogFilter02 implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		// 请求到service前要干的一些事情
        System.out.println("请求来了,我是Filter02!");
        // 过滤链,传给写一个过滤器,或者没有下一个过滤器时,直接交给对应的service
        filterChain.doFilter(servletRequest,servletResponse);
        // 请求响应返回给客户端前要执行的一些事情
        System.out.println("请求结束了,我是Filter02!");
    }

    @Override
    public void destroy() {

    }
}

2.5 配置Servlet注解扫描路径

在书写过滤器类的时候我们加入了 @WebFilter 注解,他不是Spring Boot注解,所以我们要进行注解扫描路径的配置具体来说是在 Springboot01Application.java 文件加入下面语句。

@ServletComponentScan("com.example.springboot01.utils")

如图:
在这里插入图片描述

结果展示

在这里插入图片描述
在这里插入图片描述
好了~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从前慢慢慢死了

打钱!一分也行啊!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值