Author: coheigea
Date: Fri Nov 15 14:43:13 2013
New Revision: 1542278
URL: http://svn.apache.org/r1542278
Log:
Some changes to make sure that CXF knows whether an attachment was
signed/encrypted
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDataRef.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSSecurityEngine.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedDataProcessor.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/ReferenceListProcessor.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SignatureProcessor.java
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDataRef.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDataRef.java?rev=1542278&r1=1542277&r2=1542278&view=diff
==============================================================================
---
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDataRef.java
(original)
+++
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDataRef.java
Fri Nov 15 14:43:13 2013
@@ -71,6 +71,11 @@ public class WSDataRef {
* The protected DOM element
*/
private Element protectedElement;
+
+ /**
+ * Whether the protected Reference is an Attachment or not
+ */
+ private boolean attachment;
/**
* @return Id of the protected element
@@ -198,4 +203,12 @@ public class WSDataRef {
return transformAlgorithms;
}
+ public boolean isAttachment() {
+ return attachment;
+ }
+
+ public void setAttachment(boolean attachment) {
+ this.attachment = attachment;
+ }
+
}
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSSecurityEngine.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSSecurityEngine.java?rev=1542278&r1=1542277&r2=1542278&view=diff
==============================================================================
---
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSSecurityEngine.java
(original)
+++
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSSecurityEngine.java
Fri Nov 15 14:43:13 2013
@@ -435,7 +435,8 @@ public class WSSecurityEngine {
// of the current node is null. In that case, go on to the
previously stored next
// sibling
//
- if (node.getNextSibling() == null && nextSibling != null) {
+ if (node.getNextSibling() == null && nextSibling != null
+ && nextSibling.getParentNode() != null) {
node = nextSibling;
} else {
node = node.getNextSibling();
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedDataProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedDataProcessor.java?rev=1542278&r1=1542277&r2=1542278&view=diff
==============================================================================
---
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedDataProcessor.java
(original)
+++
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedDataProcessor.java
Fri Nov 15 14:43:13 2013
@@ -68,24 +68,6 @@ public class EncryptedDataProcessor impl
final String encryptedDataId = elem.getAttributeNS(null, "Id");
- if (encryptedDataId != null) {
- List<WSSecurityEngineResult> decryptionResults =
wsDocInfo.getResultsByTag(WSConstants.ENCR);
- for (int i = 0; i < decryptionResults.size(); i++) {
- WSSecurityEngineResult wsSecurityEngineResult =
decryptionResults.get(i);
- @SuppressWarnings("unchecked")
- List<WSDataRef> dataRefUris =
(List<WSDataRef>)wsSecurityEngineResult.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
- if (dataRefUris == null) {
- continue;
- }
- for (int j = 0; j < dataRefUris.size(); j++) {
- WSDataRef wsDataRef = dataRefUris.get(j);
- if (encryptedDataId.equals(wsDataRef.getWsuId())) {
- return new ArrayList<WSSecurityEngineResult>();
- }
- }
- }
- }
-
Element kiElem =
WSSecurityUtil.getDirectChildElement(elem, "KeyInfo",
WSConstants.SIG_NS);
// KeyInfo cannot be null
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/ReferenceListProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/ReferenceListProcessor.java?rev=1542278&r1=1542277&r2=1542278&view=diff
==============================================================================
---
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/ReferenceListProcessor.java
(original)
+++
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/ReferenceListProcessor.java
Fri Nov 15 14:43:13 2013
@@ -341,6 +341,8 @@ public class ReferenceListProcessor impl
if (!uri.startsWith("cid:")) {
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILED_CHECK);
}
+ dataRef.setWsuId(uri);
+ dataRef.setAttachment(true);
CallbackHandler attachmentCallbackHandler =
requestData.getAttachmentCallbackHandler();
if (attachmentCallbackHandler == null) {
@@ -402,6 +404,9 @@ public class ReferenceListProcessor impl
}
dataRef.setContent(true);
+ // Remove this EncryptedData from the security header to avoid
processing it again
+ encData.getParentNode().removeChild(encData);
+
return dataRef;
}
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SignatureProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SignatureProcessor.java?rev=1542278&r1=1542277&r2=1542278&view=diff
==============================================================================
---
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SignatureProcessor.java
(original)
+++
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SignatureProcessor.java
Fri Nov 15 14:43:13 2013
@@ -537,6 +537,7 @@ public class SignatureProcessor implemen
if (!"".equals(uri)) {
Element se = dereferenceSTR(doc, siRef, requestData,
wsDocInfo);
// If an STR Transform is not used then just find the cached
element
+ boolean attachment = false;
if (se == null) {
Data dereferencedData = siRef.getDereferencedData();
if (dereferencedData instanceof NodeSetData) {
@@ -552,6 +553,7 @@ public class SignatureProcessor implemen
}
} else if (dereferencedData instanceof OctetStreamData) {
se =
doc.createElementNS("http://docs.oasis-open.org/wss/oasis-wss-SwAProfile-1.1",
"attachment");
+ attachment = true;
}
}
if (se == null) {
@@ -563,6 +565,7 @@ public class SignatureProcessor implemen
ref.setProtectedElement(se);
ref.setAlgorithm(signedInfo.getSignatureMethod().getAlgorithm());
ref.setDigestAlgorithm(siRef.getDigestMethod().getAlgorithm());
+ ref.setAttachment(attachment);
// Set the Transform algorithms as well
@SuppressWarnings("unchecked")