스프링 WS 및 PayloadRootAnnotationMethodendPointMapping
문제
주석을 사용하여 두 가지 엔드 포인트가 있습니다. 나는 그들 각각에 다른 인터셉터를 적용하고 싶습니다. (하나는 안전한 인터셉터이고 다른 하나는 안전하지 않음) 이것을 사용하는 방법이 있습니다. PayloadRootAnnotationMethodEndpointMapping
? 누구든지 아이디어가 있습니까?
Spring과 함께 제공되는 항공사 예제의 ApplicationContext-ws.xml에 따르면 :
엔드 포인트 매핑은 요청에서 엔드 포인트로 맵핑됩니다. 우리는 보안 차단만이
GetFrequentFlyerMileageEndpoint
, 우리는 두 개의 매핑을 정의합니다.
이를 수행하는 유일한 방법은 두 가지 다른 매핑을 갖는 것입니다. org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping
그리고 org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping
안전한 것들을 위해?
해결책
인터셉터를 설정할 때 EndpointMapping
, 그러면 그 인터셉터는 그에 의해 매핑 된 모든 엔드 포인트에 적용됩니다. EndpointMapping
. 따라서 일부 엔드 포인트가 다른 엔드 포인트에 다른 인터셉터 세트를 가져 오려면 그렇다면 두 가지가 필요합니다. EndpointMapping
콩, 하나는 보안 인터셉터와 보안 엔드 포인트에 매핑하고 다른 하나는 인터셉터가없고 보안되지 않은 엔드 포인트에 매핑됩니다.
어느 EndpointMapping
사용하는 구현은 응용 프로그램과 사용하는 종말점에 따라 다릅니다.
다른 팁
애플리케이션 컨텍스트에서 SWS : 인터셉터 요소를 사용하여 SOAPACTION 또는 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"/>