摘自: OncePerRequestFilter的作用 (去掉了一些不太需要的東西)
在spring中,filter都默認繼承OncePerRequestFilter,但為什么要這樣呢?
OncePerRequestFilter顧名思義,他能夠確保在一次請求只通過一次filter,而不需要重復執行。
大家常識上都認為,一次請求本來就只過一次,為什么還要由此特別限定呢,呵呵實際上我們常識和實際的實現並不真的一樣,經過一番查閱后,此方式是為了兼容不同的web container,特意而為之(jsr168),也就是說並不是所有的container都像我們期望的只過濾一次,servlet版本不同,表現也不同。
在servlet-2.3中,Filter會過濾一切請求,包括服務器內部使用forward轉發請求和<%@ include file="/index.jsp"%>的情況。
到了servlet-2.4中Filter默認下只攔截外部提交的請求,forward和include這些內部轉發都不會被過濾,但是有時候我們需要 forward的時候也用到Filter。
因此,為了兼容各種不同的運行環境和版本,默認filter繼承OncePerRequestFilter是一個比較穩妥的選擇。