2121import java .io .ByteArrayOutputStream ;
2222import java .util .Iterator ;
2323import java .util .Properties ;
24-
2524import javax .xml .namespace .QName ;
2625
2726import org .junit .Test ;
27+
2828import org .springframework .ws .context .DefaultMessageContext ;
2929import org .springframework .ws .context .MessageContext ;
3030import org .springframework .ws .soap .SoapHeaderElement ;
3131import org .springframework .ws .soap .SoapMessage ;
3232import org .springframework .ws .soap .security .WsSecurityValidationException ;
3333import org .springframework .ws .soap .security .wss4j .callback .SimplePasswordValidationCallbackHandler ;
3434
35+ /**
36+ * @author Arjen Poutsma
37+ * @author Tareq Abedrabbo
38+ * @author Greg Turnquist
39+ */
3540public abstract class Wss4jMessageInterceptorHeaderTestCase extends Wss4jTestCase {
3641
3742 private Wss4jSecurityInterceptor interceptor ;
43+ private Wss4jSecurityInterceptor interceptorThatKeepsSecurityHeader ;
3844
3945 @ Override
4046 protected void onSetup () throws Exception {
@@ -48,6 +54,14 @@ protected void onSetup() throws Exception {
4854 callbackHandler .setUsers (users );
4955 interceptor .setValidationCallbackHandler (callbackHandler );
5056 interceptor .afterPropertiesSet ();
57+
58+ interceptorThatKeepsSecurityHeader = new Wss4jSecurityInterceptor ();
59+ interceptorThatKeepsSecurityHeader .setValidateRequest (true );
60+ interceptorThatKeepsSecurityHeader .setSecureResponse (true );
61+ interceptorThatKeepsSecurityHeader .setValidationActions ("UsernameToken" );
62+ interceptorThatKeepsSecurityHeader .setValidationCallbackHandler (callbackHandler );
63+ interceptorThatKeepsSecurityHeader .setRemoveSecurityHeader (false );
64+ interceptorThatKeepsSecurityHeader .afterPropertiesSet ();
5165 }
5266
5367 @ Test
@@ -75,6 +89,31 @@ public void testValidateUsernameTokenPlainText() throws Exception {
7589
7690 }
7791
92+ @ Test
93+ public void testValidateUsernameTokenPlainTextButKeepSecurityHeader () throws Exception {
94+ SoapMessage message = loadSoap11Message ("usernameTokenPlainTextWithHeaders-soap.xml" );
95+ MessageContext messageContext = new DefaultMessageContext (message , getSoap11MessageFactory ());
96+ interceptorThatKeepsSecurityHeader .validateMessage (message , messageContext );
97+ Object result = getMessage (message );
98+ assertNotNull ("No result returned" , result );
99+
100+ boolean foundSecurityHeader = false ;
101+ for (Iterator <SoapHeaderElement > i = message .getEnvelope ().getHeader ().examineAllHeaderElements (); i .hasNext ();) {
102+ SoapHeaderElement element = i .next ();
103+ QName name = element .getName ();
104+ if (name .getNamespaceURI ()
105+ .equals ("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" )) {
106+ foundSecurityHeader = true ;
107+ }
108+
109+ }
110+ assertTrue (foundSecurityHeader );
111+
112+ assertXpathExists ("header1 not found" , "/SOAP-ENV:Envelope/SOAP-ENV:Header/header1" , getDocument (message ));
113+ assertXpathExists ("header2 not found" , "/SOAP-ENV:Envelope/SOAP-ENV:Header/header2" , getDocument (message ));
114+
115+ }
116+
78117 @ Test (expected =WsSecurityValidationException .class )
79118 public void testEmptySecurityHeader () throws Exception {
80119 SoapMessage message = loadSoap11Message ("emptySecurityHeader-soap.xml" );
0 commit comments