내가 비슷한 문제가 있었다, 나는, 그들은 끝 지점에 도달하기 전에 헤더를 수정하는 봄 인터셉터를 사용하여 종료 테스트를 위해서만 인터셉터를 사용할 수있었습니다.
당신이
public class ModifySoapHeaderInterceptor implements
SmartEndpointInterceptor
{
//WSConstants.WSSE_NS;
private static final String DEFAULT_SECURITY_URL = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
private static final String SECURITY_TAG = "Security";
private static final String SECURITY_PREFIX = "wsse";
private static final String USER_NAME_TOKEN = "UsernameToken";
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint)
throws Exception
{
SaajSoapMessage saajSoapMessage(SaajSoapMessage)messageContext.getRequest());
SOAPHeader soapHeader = saajSoapMessage.getSaajMessage().getSOAPPart()
.getEnvelope().getHeader();
//you can modify header's as you choose
Name headerElement = saajSoapMessage.getSaajMessage().getSOAPPart()
.getEnvelope()
.createName(SECURITY_TAG, SECURITY_PREFIX, DEFAULT_SECURITY_URL);
SOAPHeaderElement soapHeaderElement = soapHeader
.addHeaderElement(headerElement);
SOAPElement usernameToken = soapHeaderElement.addChildElement(
USER_NAME_TOKEN, SECURITY_PREFIX);
SOAPElement userNameElement = usernameToken.addChildElement("Username",
SECURITY_PREFIX);
userNameElement.addTextNode("userid");//you can inject via spring
SOAPElement passwordElement = usernameToken.addChildElement("Password",
SECURITY_PREFIX);
passwordElement.addTextNode("password");
return true;
}
}
구성 봄 컨텍스트에서이 인터셉터를 선택하면 당신은
<sws:interceptors>
<bean class="prasanna.ws.security.wss4j.ModifySoapHeaderInterceptor"/>
</sws:interceptors>
이가 필요한 보안 헤더를 추가 할 다른 인터셉터를 사용하여, 나는 SmartEndpointInterceptor를 구현, 인터셉터 만들기 메시지가 끝 지점에 도달하기 전에 MockWebServiceClient를 사용하여 웹 서비스를 테스트 할 수 있습니다.
감사합니다. 필자는 제작 환경을 포함하는 테스트 용 대체 context.xml을 사용하기 때문에 인터셉터를 가정 할 수 있습니다. –