springboot中使用filter

springboot中使用Filter主要有两种方式:

方式一、使用注解的方式:

首先写一个Filter类继承Filter,然后再这个类上加上@WebFilter(urlPatterns = "/*")注解,路径表示需要过滤的路径。具体实现如下:

@WebFilter(filterName = "MyFilter",urlPatterns = "/*")
public class MyFilter implements Filter {
    public void destroy() {

    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

        System.out.println("进入了MyFilter。。。。。。。。。。。");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

但是这个时候,Springboot并不知道你加了Filter,所以需要在Main方法上加上@ServletComponentScan注解,表示Servlet组件扫描同时他也可以扫描Filter,可以加上参数basePackages来说明需要扫描的包是哪个。具体如下:

@SpringBootApplication//SpringBoot的全局的自动配置注解,所有的业务类都要放在子包下,才能自动配置
@ServletComponentScan(basePackages = {"com.kunkun.springboot.servlet","com.kunkun.springboot.filter"})//servlet扫描和过滤器扫描
public class Application {

    public static void main(String[] args) {


        //固定的代码,启动SpringBoot程序,初始化Spring容器
        SpringApplication.run(Application.class, args);
    }

}

这样就完成了Filter的配置:结果如下:

 

 方式二、使用配置类的方式:

首先实现一个正常的Filter,如下:

public class HeFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

        System.out.println("进入了HeFilter。。。。。");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

 

然后实现一个配置类,如下:

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean registrationBean(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new HeFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }
}

 

这边基本和Servlet的配置类一样,输出结果如下:

 

posted @ 2020-08-03 18:10  quintan  阅读(489)  评论(0)    收藏  举报