Skip to content

Commit 1cc0807

Browse files
committed
Use signature validator of WSSConfig if available
Closes gh-953
1 parent c1079e7 commit 1cc0807

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

spring-ws-security/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ dependencies {
3535
testImplementation("org.assertj:assertj-core")
3636
testImplementation("org.easymock:easymock")
3737
testImplementation("org.junit.jupiter:junit-jupiter")
38+
testImplementation("org.mockito:mockito-core")
3839
testImplementation("org.springframework:spring-test")
3940
}
4041

spring-ws-security/src/main/java/org/springframework/ws/soap/security/wss4j2/Wss4jSecurityInterceptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.apache.wss4j.dom.validate.Credential;
4646
import org.apache.wss4j.dom.validate.SignatureTrustValidator;
4747
import org.apache.wss4j.dom.validate.TimestampValidator;
48+
import org.apache.wss4j.dom.validate.Validator;
4849
import org.w3c.dom.Document;
4950
import org.w3c.dom.Element;
5051

@@ -906,7 +907,10 @@ protected void verifyCertificateTrust(WSHandlerResult result) throws WSSecurityE
906907
requestData.setSigVerCrypto(this.validationSignatureCrypto);
907908
requestData.setEnableRevocation(this.enableRevocation);
908909

909-
SignatureTrustValidator validator = new SignatureTrustValidator();
910+
Validator validator = (this.wssConfig != null) ? this.wssConfig.getValidator(WSConstants.SIGNATURE) : null;
911+
if (validator == null) {
912+
validator = new SignatureTrustValidator();
913+
}
910914
validator.validate(credential, requestData);
911915
}
912916
}

spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/Wss4jMessageInterceptorX509Test.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package org.springframework.ws.soap.security.wss4j2;
1818

1919
import org.apache.wss4j.common.crypto.Merlin;
20+
import org.apache.wss4j.dom.WSConstants;
21+
import org.apache.wss4j.dom.engine.WSSConfig;
22+
import org.apache.wss4j.dom.validate.Validator;
2023
import org.junit.jupiter.api.Test;
2124
import org.w3c.dom.Document;
2225

@@ -25,6 +28,11 @@
2528
import org.springframework.ws.soap.SoapMessage;
2629
import org.springframework.ws.soap.security.wss4j2.support.CryptoFactoryBean;
2730

31+
import static org.mockito.ArgumentMatchers.any;
32+
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.times;
34+
import static org.mockito.Mockito.verify;
35+
2836
public abstract class Wss4jMessageInterceptorX509Test extends Wss4jTest {
2937

3038
protected Wss4jSecurityInterceptor interceptor;
@@ -67,4 +75,25 @@ public void testAddCertificate() throws Exception {
6775
this.interceptor.validateMessage(message, messageContext);
6876
}
6977

78+
@Test
79+
void validateSignatureWithWssConfig() throws Exception {
80+
this.interceptor.setSecurementPassword("123456");
81+
this.interceptor.setSecurementUsername("rsaKey");
82+
SoapMessage message = loadSoap11Message("empty-soap.xml");
83+
MessageContext messageContext = getSoap11MessageContext(message);
84+
85+
this.interceptor.setSecurementSignatureKeyIdentifier("DirectReference");
86+
87+
this.interceptor.secureMessage(message, messageContext);
88+
Document document = getDocument(message);
89+
assertXpathExists("Absent BinarySecurityToken element",
90+
"/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:BinarySecurityToken", document);
91+
WSSConfig wssConfig = WSSConfig.getNewInstance();
92+
Validator validator = mock(Validator.class);
93+
wssConfig.setValidator(WSConstants.SIGNATURE, validator);
94+
this.interceptor.setWssConfig(wssConfig);
95+
this.interceptor.validateMessage(message, messageContext);
96+
verify(validator, times(2)).validate(any(), any()); // Also SignatureProcessor
97+
}
98+
7099
}

0 commit comments

Comments
 (0)