方式一:使用@WebFilter+@ServletComponentScan
1)创建类com.zhi.demo.filter.CustomFilter1,添加注解@WebFilter(urlPatterns = { "/test1/*" }),urlPatterns表示需要过滤的地址
@WebFilter(urlPatterns = { "/test1/*" })
public class CustomFilter1 implements Filter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
logger.info("请求{}经过过滤器", httpServletRequest.getRequestURI());
chain.doFilter(request, response);
}
}
2)在启动类上添加注解@ServletComponentScan(basePackages = "com.zhi.demo.filter")
@ServletComponentScan(basePackages = "com.zhi.demo.filter") @SpringBootApplication public class InterceptApplication { public static void main(String[] args) { new SpringApplicationBuilder(InterceptApplication.class).bannerMode(Mode.OFF).run(args); } }
方式二:使用FilterRegistrationBean注册拦截器
1)创建类com.zhi.demo.filter.CustomFilter2
public class CustomFilter2 implements Filter { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; logger.info("请求{}经过过滤器", httpServletRequest.getRequestURI()); chain.doFilter(request, response); } }
2)使用FilterRegistrationBean载入过滤器,并只对/test2/*进行拦截
@Configuration public class BeanConfig { @Bean public FilterRegistrationBean<CustomFilter2> filterRegistrationBean() { FilterRegistrationBean<CustomFilter2> registration = new FilterRegistrationBean<>(); registration.setFilter(new CustomFilter2()); registration.addUrlPatterns("/test2/*"); return registration; } }
注意:
1、使用@Component注解时,也可以将Filter注册到容器中,但@WebFilter配置信息会失效
2、同时使用上面的2种方式,会两次拦截
浙公网安备 33010602011771号