zoukankan      html  css  js  c++  java
  • SpringBoot 中过滤器的简介及使用方式

    过滤器简介

    • 过滤器依赖Servlet容器,属于Servlet规范的一部分。
    • 在实现上基于Servlet容器的函数回调,可以对几乎所有请求进行过滤。
    • Filter的生命周期由Servlet容器管理。

    过滤器执行流程

    img

    过滤器配置使用方式一

    @Order(1) // 指定过滤器的执行顺序
    @WebFilter(filterName = "CostTimeFilter", urlPatterns = "/*" , initParams = {
            @WebInitParam(name = "URL", value = "http://localhost:8080")})
    public class CostTimeFilter implements Filter {
        private String url;
        /**
         * filter对象只会创建一次,init方法也只会执行一次。
         */
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.url = filterConfig.getInitParameter("URL");
            System.out.println("Filter init...");
        }
    
        /**
         * 主要的业务代码编写方法
         */
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        	long start = System.currentTimeMillis();
            System.out.println(start + " Filter doFilter before...");
            filterChain.doFilter(servletRequest, servletResponse);
        	long end = System.currentTimeMillis();
            System.out.println(end + "Filter doFilter after...");
        }
    
        /**
         * 在销毁Filter时自动调用。
         */
        @Override
        public void destroy() {
            System.out.println("Filter destroy...");
        }
    }
    
    @RestController
    public class IndexContoller {
        @RequestMapping("/query")
        public void query() throws Exception {
            System.out.println("IndexContoller query...");
        }
    }
    
    @SpringBootApplication
    @ServletComponentScan // 扫描 Servlet 相关的组件
    public class SpringBootFilterApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootFilterApplication.class, args);
        }
    }
    

    过滤器配置方式二

    public class CostTimeFilter implements Filter {
        private String url;
        /**
         * filter对象只会创建一次,init方法也只会执行一次。
         */
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.url = filterConfig.getInitParameter("URL");
            System.out.println("Filter init...");
        }
    
        /**
         * 主要的业务代码编写方法
         */
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        	long start = System.currentTimeMillis();
            System.out.println(start + " Filter doFilter before...");
            filterChain.doFilter(servletRequest, servletResponse);
        	long end = System.currentTimeMillis();
            System.out.println(end + "Filter doFilter after...");
        }
    
        /**
         * 在销毁Filter时自动调用。
         */
        @Override
        public void destroy() {
            System.out.println("Filter destroy...");
        }
    }
    
    @Configuration
    public class FilterConfig {
        @Bean
        public FilterRegistrationBean registFilter() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            registration.setFilter(new CostTimeFilter());
            registration.addUrlPatterns("/*");
            registration.setName("CostTimeFilter");
            registration.setOrder(1);
            return registration;
        }
    }
    
  • 相关阅读:
    SQL server 数据库的版本为661,无法打开,此服务器只支持655版及更低版本。不支持降级路径
    SQL Server 2005 企业版没有 Microsoft SQL Server Management
    Tomcat 中 jsp 中文乱码显示处理解决方案
    ASP.NET后台输出js
    未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
    socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
    C# Socket连接 无法访问已释放的对象
    未找到导入的项目,请确认 <Import> 声明中的路径正确
    轻量级容器Docker+微服务+RESTful API
    Foundation和UIKit框架组织图
  • 原文地址:https://www.cnblogs.com/danhuang/p/12769298.html
Copyright © 2011-2022 走看看