Filter:
配置filter以及filtermapping在web.xml中,在程序裏判斷URL來篩選白名單。
Interceptor:
使用Struts零配置時需要在Action中加入@ParentPackage的註解使其生效。
比較一,filter基於回調函數,我們需要實現的filter接口中doFilter方法就是回調函數,而interceptor則基於java本身的反射機制,這是兩者最本質的區別。
比較二,filter是依賴於servlet容器的,即只能在servlet容器中執行,很顯然沒有servlet容器就無法來回調doFilter方法。而interceptor與servlet容器無關。
比較三,Filter的過濾範圍比Interceptor大,Filter除了過濾請求外通過通配符可以保護頁面,圖片,文件等等,而Interceptor只能過濾請求。
比較四,Filter的過濾例外一般是在加載的時候在init方法聲明,而Interceptor可以通過在xml聲明是guest請求還是user請求來辨別是否過濾。