Spring WS e PayloadRootAnnotationMethodEndpointMapping
Domanda
Ho due endpoint usando le annotazioni. Voglio applicare diversi intercettori a ciascuno di essi. (uno è un intercettore sicuro e l'altro non è sicuro) C'è un modo per farlo usando PayloadRootAnnotationMethodEndpointMapping
? Qualcuno ha un'idea?
Secondo applicationContext-ws.xml dell'esempio della compagnia aerea fornito con Spring:
La mappa delle mappature degli endpoint da a richiesta a un endpoint. Perché noi voglio solo l'intercettazione della sicurezza si verificano per il
GetFrequentFlyerMileageEndpoint
, noi definire due mappature: una con il securityInterceptor e uno generale senza di essa.
Quindi l'unico modo per farlo è avere due diversi mapping: org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping
e org.springframework.ws.server. endpoint.mapping.PayloadRootQNameEndpointMapping
per quelli sicuri?
Soluzione
Quando si imposta un intercettore impostato su EndpointMapping
, tali intercettori si applicheranno a tutti gli endpoint mappati da tale EndpointMapping
. Quindi, se si desidera che alcuni endpoint ottengano un diverso set di intercettori rispetto ad altri endpoint, quindi sì, sono necessari due bean EndpointMapping
diversi, uno con l'interceptor sicuro e il mapping agli endpoint sicuri e un altro senza intercettori e mappatura agli endpoint non garantiti.
Quali implementazioni di EndpointMapping
utilizzate dipendono dall'applicazione e dal tipo di endpoint che utilizza.
Altri suggerimenti
Puoi anche usare l'elemento sws: interceptors nel tuo contesto applicativo per specificare particolari intercettori con particolari endpoint, filtrati dai loro attributi soapAction o 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"/>