Spring WS et PayloadRootAnnotationMethodEndpointMapping
Question
J'ai deux points de terminaison utilisant des annotations. Je veux appliquer différents intercepteurs à chacun d'eux. (l'un étant un intercepteur sécurisé et l'autre non sécurisé) Existe-t-il un moyen de le faire en utilisant PayloadRootAnnotationMethodEndpointMapping
? Quelqu'un a une idée?
Selon l'applicationContext-ws.xml de l'exemple de compagnie aérienne fourni avec Spring:
La carte de correspondance des points finaux à partir d'un demande à un noeud final. Parce que nous veulent seulement l'interception de sécurité se produire pour la
GetFrequentFlyerMileageEndpoint
, nous définir deux correspondances: une avec le securityInterceptor, et un général sans elle.
Ainsi, la seule façon de procéder consiste à utiliser deux mappages différents: org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping
et org.springframework.ws.server. endpoint.mapping.PayloadRootQNameEndpointMapping
pour ceux qui sont sécurisés?
La solution
Lorsque vous attribuez à un intercepteur un EndpointMapping
, ces intercepteurs s’appliquent à tous les points de terminaison mappés par ce EndpointMapping
. Ainsi, si vous souhaitez que certains points d'extrémité transmettent un ensemble différent d'intercepteurs à d'autres points d'extrémité, vous avez besoin de deux beans EndpointMapping
différents, l'un avec l'intercepteur sécurisé et le mappage vers les noeuds finaux sécurisés, et l'autre sans intercepteurs et mappage vers les points de terminaison non sécurisés.
Les implémentations EndpointMapping
que vous utilisez dépendent de l'application et des types de points de terminaison utilisés.
Autres conseils
Vous pouvez également utiliser l'élément sws: interceptors dans votre contexte d'application pour spécifier des intercepteurs particuliers avec des points de terminaison particuliers, filtrés par leurs attributs soapAction ou payloadRoot.
<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"/>