2014-04-30 191 views
5

我上的Spring應用程序的工作中,我想要做一些安全檢查如文件的MD5校驗,DB檢查,應用程序版本檢查等攔截器或過濾器

我看了一下攔截器和過濾器,但仍然一有點混淆了哪一個很好用。

無論我讀過什麼文檔,都指定過濾器和攔截器都可以用於日誌記錄和審覈,因此哪一個適用於此場景。 也可以配置所有這些安全檢查(文件的MD5檢查,數據庫檢查,應用程序版本檢查),意味着數據庫檢查是允許的,同樣允許應用程序版本檢查。

+0

複製方法(http://stackoverflow.com/questions/8000844/spring-handlerinterceptor-vs-servlet - 過濾器) – anre

回答

9

在我看來過濾器和攔截器之間最大的區別之一是:

濾鏡只能在J2EE Web應用程序,您不能使用應用程序服務器之外,攔截器可以在不同的組件協同工作,而不是依賴於網頁層,總結攔截器比過濾器有一個廣泛的領域。 如果您打算在容器外部移動某個組件,則應考慮使用攔截器。

過濾器在請求/響應域中工作更多,另一方面,攔截器在方法執行域中執行更多操作。

如果您需要做一些可能會影響您的應用程序的請求或響應,例如日誌記錄,安全性,審計,或者您將影響到它們的數據,您的選擇是過濾器,請不要忘記插件能力那些提供。

攔截器結合使用與Java EE管理類 允許開發人員需要調用相關的目標 類攔截方法,結合方法調用或生命週期事件

+0

感謝您的快速回復,我可能是錯的,但根據您的句子過濾器在web層和攔截器的作品可以在任何地方使用,對嗎? – Amogh

+0

Filter是一個Web組件,另一方面攔截器可以在目標類中定義爲攔截器方法,或者在關聯的類中定義爲攔截器類,如果您使用的是某個攔截器,則可以在任何地方使用yes。一個,javax.interceptor廣泛 – Koitoer

+0

好吧,我現在明白了。我會和攔截器一起去,但我不打算將任何組件移出容器外,因爲它對於我來說還不清楚什麼是從容器中取出的意思。我將使用攔截器,因爲如果任何安全檢查失敗,那麼我可以更改使用攔截器可以完成的ModelAndView。這是對的嗎? – Amogh

3

我來不及回答雖然我想分享我對此的看法。

過濾器僅用於web層中,因爲它在web.xml中定義。我們無法在Web上下文中使用它。雖然Spring Interceptor可以在任何地方使用,因爲它是在Application上下文中定義的。

考慮到上述不同,對於來自網頁的傳入請求的登錄驗證和審計,我們應該使用servlet過濾器。雖然爲了實現業務層日誌記錄和審計以及許多其他功能,我們應該使用Interceptor。

除此之外,如果您使用的是Spring MVC。那麼你想在一個框架中保留所有的過濾或攔截邏輯,而不是在servlet過濾器中編寫一些邏輯,而在春天編寫一些邏輯。

春天給另外一個額外的控制點afterCompletion執行之前和之後[VS Servlet過濾春天的HandlerInterceptor]的