2012-10-04 63 views
2

我在Spring WS上有兩個端點攔截器的Web服務。 XML配置看起來像這樣Spring WS 2.1.0:端點攔截器命令

<sws:interceptors> 
    <bean class="org.someorg.security.SignatureInterceptor"/> 
    <bean class="org.someorg.common.LoggingInterceptor"> 
     <constructor-arg value="logger_1"/> 
    </bean>  
</sws:interceptors> 

SignatureInterceptor檢驗進來的SOAP信封和體徵傳出SOAP信封的簽名。

LoggingInterceptor將原始SOAP數據(字節數組)存儲在數據庫中。

我需要SignatureInterceptor在LoggingInterceptor之前調用並以這種方式編寫攔截器bean,我期望它能解決我的問題。但根據日誌消息,LoggingInterceptor首先調用數據庫中的未簽名數據存儲。

然後,我改變配置簡單swaped bean聲明,他們開始工作,我希望

<sws:interceptors> 
    <bean class="org.someorg.common.LoggingInterceptor"> 
     <constructor-arg value="logger_1"/> 
    </bean>  
    <bean class="org.someorg.security.SignatureInterceptor"/>  
</sws:interceptors> 

但這種情況我也不清楚。我如何明確設置攔截器的調用順序?

+0

請參閱http://forum.springsource.org/showthread.php?59921-Order-of-Interceptors例如按正確順序選擇性請求/響應日誌記錄 – Vadzim

回答

2

順序應該是你指定的方式(除非它們被映射到特定的端點URL,在這種情況下,它們是最後處理的) - 請注意處理handleResponse的順序是handlRequest相反 -

理想情況下,你的情況,你應該看到:

  1. SignatureInterceptor.handleRequest(..)
  2. LoggingInterceptor.handleRequest(..)
  3. 端點處理請求
  4. LoggingInterceptor.handleResponse()
  5. SignatureInterceptor.handleResponse()

我想小試和它的作品以同樣的方式對我來說。

+0

感謝您的幫助解釋。我真的沒有注意到handleResponse的順序與handleRequest相反。現在我已經理解攔截器鏈是如何工作的 –