• Spring Boot - filter 的顺序


    定义过滤器的执行顺序

    1、第一个过滤器

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import java.io.IOException;
    
    public class MyFirstFilter 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("执行 MyFirstFilter...");
    
            // 继续执行过滤器链
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            // 清理逻辑
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    第二个过滤器

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import java.io.IOException;
    
    public class MySecondFilter 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("执行 MySecondFilter...");
    
            // 继续执行过滤器链
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            // 清理逻辑,如果需要的话
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    定义过滤器的执行顺序的配置

    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class FilterConfig {
    
        @Bean
        public FilterRegistrationBean myFirstFilter() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean<>();
            registrationBean.setFilter(new MyFirstFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setOrder(1);
            return registrationBean;
        }
    
        @Bean
        public FilterRegistrationBean mySecondFilter() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean<>();
            registrationBean.setFilter(new MySecondFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setOrder(2);
            return registrationBean;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    定义controller

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
    
        @RequestMapping("/hello")
        public String hello() {
            return "hello filter!";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    正常访问:http://localhost:8080/hello
    在这里插入图片描述
    不正常访问:http://localhost:8080/HELLO
    在这里插入图片描述
    在这里插入图片描述
    可看到路径mapping是区分大小写的,如果路径不正确,虽然404,但过滤器链依然会执行(/*全局情况下)。

  • 相关阅读:
    《计算机体系结构量化研究方法》1.8 性能的测量、报告和汇总
    二叉树的概念、存储及遍历
    【Unity3D】发射(RayCast)物理射线(Ray)
    ARM处理器有哪些工作模式和寄存器?各寄存器作用是什么?ARM异常中断处理流程?
    LeetCode第 319 场周赛题解
    【JavaSE】内部类总结
    基于FPGA的64位8级流水线加法器
    Windows 遇到 taskkill 删除某个进程后,该进程显示timewait,导致会有一个类似缓存的问题,无法及时更新应用
    传智教育|Git实战-上线出bug,如何代码回滚?
    Apache Storm 2.5.0 单机安装与配置
  • 原文地址:https://blog.csdn.net/qq_43116031/article/details/134477035