Spring WS и PayloadRootAnnotationMethodEndpointMapping
Вопрос
У меня есть две конечные точки, использующие аннотации.Я хочу применить к каждому из них разные перехватчики.(один из них является безопасным перехватчиком, а другой небезопасен). Есть ли способ сделать это, используя PayloadRootAnnotationMethodEndpointMapping
?У кого-нибудь есть идеи?
Согласно файлу applicationContext-ws.xml примера авиакомпании, который поставляется с Spring:
Карта отображений конечной точки из запроса в конечную точку.Потому что мы хотим, чтобы перехват безопасности произошел для
GetFrequentFlyerMileageEndpoint
, мы определяем две сопоставления:Один с безопасностью Interceptor, и общий без него.
Единственный способ сделать это — иметь два разных сопоставления: org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping
и org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping
для безопасных?
Решение
Когда вы задаете для перехватчика значение EndpointMapping
, эти перехватчики будут применяться ко всем конечным точкам, отображаемым этим EndpointMapping
. Поэтому, если вы хотите, чтобы некоторые конечные точки получали другой набор перехватчиков для других конечных точек, тогда да, вам нужны два разных bean-компонента EndpointMapping
, один с защищенным перехватчиком и отображением на безопасные конечные точки, а другой без перехватчики и сопоставление с незащищенными конечными точками.
Какие реализации EndpointMapping
вы используете, зависит от приложения и от того, какие конечные точки оно использует.
Другие советы
Вы также можете использовать элемент sws:interceptors в контексте вашего приложения, чтобы указать конкретные перехватчики с определенными конечными точками, отфильтрованные по их атрибутам мылаAction или payloadRoot.
От:http://static.springsource.org/spring-ws/site/reference/html/server.html#server-endpoint-interceptor
<sws:interceptors>
<bean class="samples.MyGlobalInterceptor"/>
<sws:payloadRoot namespaceUri="http://www.example.com">
<bean class="samples.MyPayloadRootInterceptor"/>
</sws:payloadRoot>
<sws:soapAction value="http://www.example.com/SoapAction">
<bean class="samples.MySoapActionInterceptor1"/>
<ref bean="mySoapActionInterceptor2"/>
</sws:soapAction>
</sws:interceptors>
<bean id="mySoapActionInterceptor2" class="samples.MySoapActionInterceptor2"/>