日志放在拦截器还是过滤器
Filter
过滤器是 Web 应用程序组件,可以在请求到达 Servlet 之前对其进行访问,也可以在响应信息返回到客户端之前对其进行拦截。
Filter 的接口方法:
- init:Serverlet 容器创建过滤器实例的时候调用
- doFilter:拦截到达的请求,检查和处理Header的body的数据
- destory:销毁过滤器,doFilter 中所有的方法超时之后,web 容器才会调用销毁
链式调用:

Interceptor
拦截器是 AOP 的一种实现策略,用于在某个方法或宁段被访问前对它进行拦截,然后在其之前或之后加上某些操作。
Interceptor 的接口方法:preHandler、postHandler、afterCompletion
HandlerInterceptor 的接口方法:
- preHandle:方法前置初始化操作,请求预处理,权限校验,返回Boolean
- postHandle:方法后置处理,Controller 调用之后,DispatcherServelet视图渲染之前处理
- afterCompletion:请求处理完成,包括 DispatcherServelet 渲染之后,主要是做资源清理工作
使用过滤器实现日志拦截


需要加一个 SpringBoot 的注解定义扫描包的范围:

使用拦截器实现日志拦截
注意下面的起始时间不是线程安全的:




- order 越小,优先级越高
- 下面的实现方式是线程安全的。在Request 或者 ThreadLocal 里面保存变量


选择
使用范围不同:Filter 只可以用于WEB程序,但是Interceptor可以用于非WEB项目
规范不同:Filter是Serverlet定义的,Interceptor是web定义的
使用的资源不同:Interceptor 是 Spring 管理的。Filter 不是。
优先去考虑使用拦截器,可以使用Spring所有的Bean。
posted on 2025-10-14 23:52 chuchengzhi 阅读(9) 评论(0) 收藏 举报
浙公网安备 33010602011771号