(1)過濾器:
依賴於servlet容器,是JavaEE標準,是在請求進入容器之後,還未進入Servlet之前進行預處理,並且在請求結束返回給前端這之間進行後期處理。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是壹個過濾器實例只能在容器初始化時調用壹次。使用過濾器的目的是用來做壹些過濾操作,獲取我們想要獲取的數據,比如:在過濾器中修改字符編碼;在過濾器中修改HttpServletRequest的壹些參數,包括:過濾低俗文字、危險字符等
關於過濾器的壹些用法可以參考我寫過的這些文章:
繼承HttpServletRequestWrapper以實現在Filter中修改HttpServletRequest的參數:
在SpringMVC中使用過濾器(Filter)過濾容易引發XSS的危險字符:
(2)攔截器:
攔截器不依賴與servlet容器,依賴於web框架,在SpringMVC中就是依賴於SpringMVC框架。在實現上基於Java的反射機制,屬於面向切面編程(AOP)的壹種運用。由於攔截器是基於web框架的調用,因此可以使用spring的依賴註入(DI)獲取IOC容器中的各個bean,進行壹些業務操作,同時壹個攔截器實例在壹個controller生命周期之內可以多次調用。但是缺點是只能對controller請求進行攔截,對其他的壹些比如直接訪問靜態資源的請求則沒辦法進行攔截處理,攔截器功在對請求權限鑒定方面確實很有用處