1. 程式人生 > 實用技巧 >springboot中使用filter

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的配置類一樣,輸出結果如下: