SpringBoot创建拦截器Interceptor以及过滤器Filter
-
过滤器的创建
1、创建自定义的过滤器类,实现
javax.servlet.Filter
接口,重新doFilter
方法,实现自定义逻辑,并放行
public class MyFilter implements Filter{@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//自定义逻辑//放行filterChain.doFilter(servletRequest,servletResponse);} }
2、给自定义的过滤器类添加注解,并配置过滤的url范围。
@WebFilter(urlPatterns = "/*")public class MyFilter implements Filter{...}
3、配置SpringBoot启动类添加注解
@ServletComponentScan
,并配置扫描自定义的过滤器类所在的包路径@SpringBootApplication @ServletComponentScan("com.example.filter") public class MapDemoSpringBootApplication {public static void main(String[] args) {SpringApplication.run(MapDemoSpringBootApplication.class, args);} }
-
拦截器的创建
1、创建自定义的拦截器,并实现HandlerInterceptor接口,重构相应的方法(preHandle,postHandle,afterCompletion)
public class Myintercepor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//自定义逻辑return true;//false请求将会被拦截}
}
2、创建配置类,实现WebMvcConfigurer
,重新addInterceptors
方法,配置拦截路径,添加@Configuration
将实列对象注入IOC容器。
@Configuration
public class InterceporConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {Myintercepor myintercepor =new Myintercepor();//添加自定义的拦截器,配置拦截路径,并将实列对象注入IOC容器registry.addInterceptor(myintercepor).addPathPatterns("/intercepor/**");}
}
-
区别
相同的:
过滤器(Filter)和拦截器(Interceptor)的核心功能都是对请求或响应进行处理或拦截
不同的:
过滤器通常用于过滤HTTP请求,例如通过检查请求参数、URL或头部信息来决定是否继续处理请求。
而拦截器则更常用于
拦截方法调用
,例如在方法执行前后进行日志记录、权限检查等操作。
使用场景、实现机制、适用框架、配置方式、性能影响等区别请详细参考深入理解过滤器(Filter)与拦截器(Interceptor)的区别。