Author: giger
Date: Wed Jan 29 13:53:52 2014
New Revision: 1562443
URL: http://svn.apache.org/r1562443
Log:
WSS-490 - Derived Endorsing policy validation error
Modified:
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
Modified:
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java?rev=1562443&r1=1562442&r2=1562443&view=diff
==============================================================================
---
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
(original)
+++
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
Wed Jan 29 13:53:52 2014
@@ -46,6 +46,7 @@ import org.apache.xml.security.stax.secu
import org.apache.xml.security.stax.securityEvent.TokenSecurityEvent;
import org.apache.xml.security.stax.securityToken.InboundSecurityToken;
import org.apache.xml.security.stax.securityToken.SecurityToken;
+import org.apache.xml.security.stax.securityToken.SecurityTokenConstants;
/**
* Concrete security context implementation
@@ -519,7 +520,9 @@ public class InboundWSSecurityContextImp
if
(WSSecurityEventConstants.SignedElement.equals(securityEvent.getSecurityEventType()))
{
SignedElementSecurityEvent signedElementSecurityEvent =
(SignedElementSecurityEvent) securityEvent;
if (signedElementSecurityEvent.isSigned()
- &&
signedElementSecurityEvent.getSecurityToken().getId().equals(tokenSecurityEvent.getSecurityToken().getId())
+ &&
matchesTokenOrWrappedTokenId(tokenSecurityEvent.getSecurityToken(),
+ signedElementSecurityEvent.getSecurityToken().getId(),
+ SecurityTokenConstants.TokenUsage_Signature)
&& WSSUtils.pathMatches(elementPath,
signedElementSecurityEvent.getElementPath(), true, false)) {
return true;
}
@@ -528,6 +531,22 @@ public class InboundWSSecurityContextImp
return false;
}
+ private boolean matchesTokenOrWrappedTokenId(
+ SecurityToken securityToken, String id,
+ SecurityTokenConstants.TokenUsage tokenUsage) throws
XMLSecurityException {
+ if (securityToken.getId().equals(id) &&
securityToken.getTokenUsages().contains(tokenUsage)) {
+ return true;
+ }
+ List<? extends SecurityToken> wrappedTokens =
securityToken.getWrappedTokens();
+ for (int i = 0; i < wrappedTokens.size(); i++) {
+ boolean match = matchesTokenOrWrappedTokenId(wrappedTokens.get(i),
id, tokenUsage);
+ if (match) {
+ return match;
+ }
+ }
+ return false;
+ }
+
private boolean encryptsElement(TokenSecurityEvent<? extends
SecurityToken> tokenSecurityEvent, List<QName> elementPath,
Deque<SecurityEvent> securityEventDeque)
throws XMLSecurityException {
for (Iterator<SecurityEvent> iterator = securityEventDeque.iterator();
iterator.hasNext(); ) {