springboot配置Filter的兩種方法


一、使用注解
1. 假設Filter類的路徑為com.sanro.filter

@Slf4j
@WebFilter(filterName = "authFilter", urlPatterns = "/*")
@Order(1) //測試好像這個參數不生效,實際生效的是Filter掃描到的順序(所以起名很重要)
public class AuthFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.debug("start to auth request validate...111");
        HttpServletRequest req = (HttpServletRequest) request;
        String token = req.getHeader("token");
        if (token != null) {
        //    :TODO check token
            log.info("auth success");
            chain.doFilter(request, response);
        } else {
            log.err("auth failed");
        }
    }
}

2. 自動掃描配置如下

@Slf4j
@EnableScheduling
@ServletComponentScan(basePackages = {"com.sanro.filter"}) //這一句完成了配置,Springboot的”懶理念“真的厲害。
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        log.debug("rest server start success.");
    }
}

二、手動配置

1. Filter類

@Slf4j
@Component
public class AuthFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.debug("start to auth request validate...111");
        HttpServletRequest req = (HttpServletRequest) request;
        String token = req.getHeader("token");
        if (token != null) {
        //    :TODO check token
            log.info("auth success");
            chain.doFilter(request, response);
        } else {
            log.err("auth failed");
        }
    }
}

 

2. Filter配置類

@Configuration
public class FilterConfig {

    @Autowired
    private AuthFilter authFilter;

    @Bean
    public FilterRegistrationBean registerAuthFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(authFilter);
        registration.addUrlPatterns("/*");
        registration.setName("authFilter");
        registration.setOrder(1);  //值越小,Filter越靠前。
        return registration;
    }
    
    //如果有多個Filter,再寫一個public FilterRegistrationBean registerOtherFilter(){...}即可。
}

 


免責聲明!

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



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