springboot添加過濾器filter 並解決@Autowired注入為null問題


1、 寫一個filter 類

import javax.servlet.*;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;

@Component // 將Filter交給spring管理,目錄是使@autowired生效
public class DemoFilter implements Filter {

    @Autowired
    private ProductMapper productMapper;
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println(" 進入了filter " );
        chain.doFilter(request,response);
    }
}

2、注冊filter(即讓filter生效)

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.beans.factory.annotation.Autowired;

@Configuration
public class FilterConfiger {

    @Autowired   // 一定要注入,才會讓 DemoFilter中的 @Autowrie生效
    private DemoFilter demoFilter;
    
    @Bean
    // @Order(1)    //spring boot會按照order值的大小,越小越先執行。(選用)  
    // 如果有多個filter , 寫多一個這方法,用不同的方法名 ,setName也要不同
    public FilterRegistrationBean configFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(demoFilter);
        filterRegistrationBean.addUrlPatterns("/*");  // 配置需要過濾的路徑
        filterRegistrationBean.setName("filterDemo");
        return filterRegistrationBean;
    }
}

 

 

也可以換種方式寫,將bean對象傳過去。如下:

filter要用到 studentMapper對象

第一步:先建filter類

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

public class DemoFilter implements Filter {

    private StudentMapper studentMapper;
    // 構造函數
    public DemoFilter(StudentMapper studentMapper) {
        this.studentMapper = studentMapper;
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println(" 進入了filter " );
        chain.doFilter(request,response);
    }
}

第二步,注冊filter

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

import javax.annotation.Resource;

@Configuration
public class FilterConfiger {
    @Resource
    private StudentMapper studentMapper;

    @Bean
    // @Order(1)    //spring boot會按照order值的大小,越小越先執行
    public FilterRegistrationBean configFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new DemoFilter(studentMapper)); // new DemoFilter時傳bean過去
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.setName("filterDemo");
        return filterRegistrationBean;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM