servlet規範從2.3起引入了servletrequestwrapper包裝類,它把調用交給被包裝的servletrequest來執行。這樣就可以對servletrequest進行擴充。例如tomcat就是将自己的request類作為包裝類的實體。
為了更好的支援httpservletrequest,servlet2.3還支援了提供了httpservletrequestwrapper,其實作了接口httpservletrequest,并且繼承了servletrequestwrapper。

sessionrepositoryrequestwrapper繼承了httpservletwrapper,并覆寫了getsession方法,通過spring自己的政策生成session。此外提供了commitsession方法來進行session送出時處理,下一章會專門講session生命周期。
1. spring定義了新的response wrapper–oncommittedresponsewrapper,其關聯了自實作的字元和位元組輸出流,并定義了一個模闆方法onresponsecommitted,由繼承子類來實作。
2. oncommittedresponsewrapper關聯了自己實作的一個位元組流和字元流。他們和普通的位元組字元流一樣也是個包裝類。
spring-session通過filter将自定義的request wrapper和response wrapper侵入到servlet容器中。
在tomcat中servlet的service方法會由applicationfilterchain調用,而filterchain的參數通過filter的filterchain.dofilter傳入。spring-session通過自定義的全局攔截器sessionrepositoryfilter(詳見第一篇)将request和response侵入進容器。
sessionrepositoryfilter繼承了onceperrequestfilter,父類的dofilter最終會将具體的處理邏輯交給子類處理。
onceperrequestfilter是用來保證一次完整的攔截鍊中,同一個類隻會被調用一次。
因為spring無法保證同一個filter類隻有一個執行個體。有可能一個filter既有可能在web.xml裡配置由容器初始化了,還有可能被作為spring的依賴引入進了delegatingfilterproxy。這樣在一次filter chain中就會存在同一個filter的多個執行個體。