1. @WebFilter方式
- 可以指定拦截规则比如:
/*
,但无法指定过滤器的顺序 - @WebFilter注解要想生效必须在启动类上加上@ServletComponentScan注解
package com.hzl.boot.config.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @description @WebFilter 注解要想生效必须在启动类上加上@ServletComponentScan注解
* 拦截规则是 /*,但无法制定过滤器的顺序
* @author: zhiLin
* @create: 2022-09-23 21:59
**/
@WebFilter(urlPatterns = "/*")
public class WebFilterDemo implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
System.out.println("WebFilter type = " + httpServletRequest.getRequestURI());
filterChain.doFilter(servletRequest,servletResponse);
}
}
2. @Bean方式
- 可以指定优先级顺序,但拦截规则只能是
/*
package com.hzl.boot.config.filter;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @description 可以指定优先级顺序,但拦截规则是 /*
* @author: zhiLin
* @create: 2022-09-23 22:20
**/
@Component
@Order(-1)
public class BeanFilterDemo implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
System.out.println("bean type = " + httpServletRequest.getRequestURI());
filterChain.doFilter(servletRequest,servletResponse);
}
}
3. FilterRegistrationBean方式
- 以上两种各有优劣,此种方式是二者的结合,推荐这种方式
- 可以自定义过滤器,设置拦截规则和优先级等配置
自定义过滤器
package com.hzl.boot.config.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @description
* @author: zhiLin
* @create: 2022-09-23 22:26
**/
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
System.out.println("FilterRegisterBean type = " + httpServletRequest.getRequestURI());
filterChain.doFilter(servletRequest,servletResponse);
}
}
过滤器配置
package com.hzl.boot.config.filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
/**
* @description
* @author: zhiLin
* @create: 2022-09-23 22:25
**/
@Configuration
public class FilterRegistrationDemo {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
// 设置自己的过滤器
registrationBean.setFilter(new MyFilter());
// 设置自定义的拦截规则
registrationBean.addUrlPatterns("/*");
// 设置拦截器的顺序
registrationBean.setOrder(1);
return registrationBean;
}
}