Spring WS 2.1.0: порядок перехватчиков конечных точек

У меня есть веб-служба на Spring WS с двумя перехватчиками конечных точек. Конфигурация XML выглядит так

<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, поэтому неподписанные данные сохраняются в базе данных.

Затем я изменил конфигурацию, просто поменял объявления bean-компонентов, и они начали работать так, как я ожидал.

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

Но этот случай мне не ясен. Как я могу явно установить порядок вызова перехватчиков?


person Community    schedule 04.10.2012    source источник
comment
См. forum.springsource.org/ в качестве примера выборочного запроса. /ответ регистрируется в правильном порядке   -  person Vadzim    schedule 12.05.2013


Ответы (1)


Порядок должен быть таким, как вы его указали (за исключением случаев, когда они сопоставляются с конкретным URL-адресом конечной точки, и в этом случае они обрабатываются последними) - обратите внимание, что порядок, в котором обрабатывается handleResponse, противоположен handlRequest -

В идеале в вашем случае вы должны увидеть:

  1. SignatureInterceptor.handleRequest(..)
  2. LoggingInterceptor.handleRequest(..)
  3. Конечная точка обрабатывает запрос
  4. LoggingInterceptor.handleResponse()
  5. SignatureInterceptor.handleResponse()

Я попробовал небольшой тест, и он работает так же для меня.

person Biju Kunjummen    schedule 04.10.2012
comment
Спасибо за полезное объяснение. Я действительно не заметил, что порядок handleResponse противоположен handleRequest. Теперь я понял, как работает цепочка перехватчиков. - person ; 05.10.2012