Spring WS y PayloadRootAnnotationMethodEndpointMapping
Pregunta
Tengo dos puntos finales que utilizan anotaciones. Quiero aplicar diferentes interceptores a cada uno de ellos. (uno es un interceptor seguro y el otro no es seguro) ¿Hay alguna manera de hacer esto usando PayloadRootAnnotationMethodEndpointMapping
? ¿Alguien tiene una idea?
De acuerdo con la aplicaciónContext-ws.xml del ejemplo de aerolínea que viene con Spring:
El mapa de mapeo de puntos finales de un solicitud a un punto final. Porque nosotros Sólo quiero la intercepción de seguridad para ocurrir para el
GetFrequentFlyerMileageEndpoint
, nosotros definir dos asignaciones: una con la interceptor de seguridad, y uno general sin ella.
Por lo tanto, la única forma de hacer esto es tener dos asignaciones diferentes: org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping
y org.springframework.ws.server. endpoint.mapping.PayloadRootQNameEndpointMapping
para los seguros?
Solución
Cuando asigna un conjunto de interceptor a un EndpointMapping
, esos interceptores se aplicarán a todos los puntos finales asignados por ese EndpointMapping
. Entonces, si desea que algunos puntos finales obtengan un conjunto diferente de interceptores para otros puntos finales, entonces sí, necesita dos beans EndpointMapping
diferentes, uno con el interceptor seguro y la asignación a los puntos finales seguros, y otro sin interceptores y mapeo a los puntos finales no seguros.
Las implementaciones de EndpointMapping
que use dependen de la aplicación y qué tipos de Endpoints usa.
Otros consejos
También puede usar el elemento sws: interceptors en el contexto de su aplicación para especificar interceptores particulares con puntos finales particulares, filtrados por sus atributos de 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"/>