SpringBoot2.x将Filter过滤器添加到容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot2.x将Filter过滤器添加到容器相关的知识,希望对你有一定的参考价值。

参考技术A

JAVA && Spring && SpringBoot2.x — 学习目录

SpringBoot 关于Filter、Servlet、Listener配置—官网

在使用嵌入式容器中(内置Tomcat),类上含有 @WebServlet 、 @WebFilter 和 @WebListener 注解时,可以通过启动类上的 @ServletComponentScan 注解进行扫描。

需要注意的是:@ServletComponentScan 在独立容器中没有任何效果,而是使用容器的内置发现机制。

任何的 Servlet 、 Filter 或者 Listener 实例都是在容器中注册的,可以使用 @Component 或者 @Bean
默认情况下,如果上下文只包含一个Servlet,则将其映射为 / ,在多个Servlet bean的情况下,bean名称用作路径前缀,过滤器映射到 /* 。

自定义Filter通过@Bean注解后,被SpringBoot自动注册到容器的Filter chain中,并且拦截路径为 /* ,这样导致的结果是:所有的URL都会被自定义的Filter过滤。

可以使用 ServletRegistrationBean 、 FilterRegistrationBean 以及 ServletListenerRegistrationBean 类进行完全的控制。

Spring Boot对Filter、Servlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。

添加filter过滤器,打印日志

filter类

技术分享图片
package com.xiaoping.house.filter;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

public class LogFilter implements Filter {
    private Logger logger= LoggerFactory.getLogger(getClass());
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        logger.info("Request--comming");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}
View Code

注册filter

技术分享图片
package com.xiaoping.house.filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

@Configuration
public class FilterBeanConfig {
    @Bean
    public FilterRegistrationBean logFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new LogFilter());
        ArrayList<String> urlList = new ArrayList<>();
        urlList.add("*");
        filterRegistrationBean.setUrlPatterns(urlList);

        return filterRegistrationBean;
    }
}
View Code

 

以上是关于SpringBoot2.x将Filter过滤器添加到容器的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2.X新版本配置拦截器在项目中的使用

springboot2.x集成dubbo (支持不同group不同注册中心)

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

javaweb中怎么添加过滤器

java项目中通过添加filter过滤器解决ajax跨域问题

添加filter过滤器,打印日志