Springboot 实战 过滤器

68 阅读1分钟

1. 创建过滤器实现类

package com.example.demo2.authorize.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

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

/**
 * @Author: ***
 * @Description: 权限验证过滤器
 * @CreateDate: 2021/5/21 11:56
 */
//标识filter
@Slf4j
@WebFilter(filterName = "AuthFilter", urlPatterns = {"/*"})
public class AuthFilter implements Filter {

    //忽略请求地址
//    public List<String> ignoreUrl = Collections.singletonList("/*/*");

    @Override
    public void init(FilterConfig filterConfig) {
        System.out.println("AuthenticationFilter---->init()");
        log.info("过滤器初始化");
    }

    @Override
    public void doFilter(
        ServletRequest request,
        ServletResponse response,
        FilterChain filterChain
    ) throws IOException, ServletException {
        log.info("过滤器处理中");
        long start = System.currentTimeMillis();
        filterChain.doFilter(request, response);
        System.out.println("LogFilter2 Execute cost=" + (System.currentTimeMillis() - start));
    }


    @Override
    public void destroy() {
        Filter.super.destroy();
        log.info("过滤器销毁");
    }
}

上述代码中,有3处需要注意:
1. 必须添加 WebFilter 注解,指定 url 和 过滤器名称,一般过滤器名和当前类名一致
2. implements Filter 必须实现 Filter 类
3. 覆写3大函数:init、destroy、doFilter

2. 将过滤器实现类添加要应用扫描下

package com.example.demo2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan; 

@SpringBootApplication

// 主要是下面这一行,括号里面就是步骤1中的自定义的过滤器实现类所在的包
@ServletComponentScan("com.example.demo2.authorize.filter")

public class Demo2Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class, args);
    }

}

上述代码主要是 第10行:
@ServletComponentScan("com.example.demo2.authorize.filter")
参数是 步骤1 中创建的过滤器所在的包