filter 與 interceptor 兩者有相似之處
都可以達到以下的應用
1.獲取headers裏的author-Cookie
2.根據cookie使用userService查找當前user
3.存在且激活 當前用戶信息設置到ThreadLocal return true;
4.不存在 或 未激活(auth) return false;
5.白名單/黑名單/Cors/Jwt/...
聽到上方的應用,應該有些聰明的夥伴已經知道了
大多都是使用web application方式進行的
例如:
當有人登入時,攔截後認證與授權
登入後操作,篩選特定依據使用者權限看是否可進行存取的驗證
filter 是優先於 interceptor
interceptor 有生命週期
filter 是有特定的介面已實作,我們可以依據情境使用。
通常我們都會複寫doFilterInternal進行一般的篩選
shouldNotFilter可以實作一些請求的黑名單/存取權限等。
- Authentication
- Logging and auditing
- Image and data compression
- Any functionality we want to be decoupled from Spring MVC
interceptor 是spring 系列
filter 是 servlet 系列
因此 filter 是獨立於spring外的
interceptor 因為有生命週期,可以處理的細度更多
- Handling cross-cutting concerns such as application logging
- Detailed authorization checks
- Manipulating the Spring context or model
https://www.baeldung.com/spring-mvc-handlerinterceptor-vs-filter
雖然兩者都可以達到以上的功能混用也沒有說不行
而filter 本身還有分 filter 和OncePerRequestFilter
filter 有可能會經過很多次
OncePerRequestFilter 確保每次請求都只會僅來這一次filter
後續進行各別程式說明。
這不是一個給新手的一個教學過程,也寫的不是很完整
希望大家多多包涵囉~
主要是給自己的一個紀錄,也分享給有需要的夥伴
這是一個心血來潮,產生的文章
若有喜歡或交流的部分都歡迎在下方留言,多多關照。