You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by co...@apache.org on 2015/03/06 11:44:22 UTC
svn commit: r1664582 - in /webservices/wss4j/trunk:
ws-security-common/src/main/java/org/apache/wss4j/common/util/
ws-security-dom/src/main/java/org/apache/wss4j/dom/
ws-security-dom/src/main/java/org/apache/wss4j/dom/message/
ws-security-dom/src/main/...
Author: coheigea
Date: Fri Mar 6 10:44:21 2015
New Revision: 1664582
URL: http://svn.apache.org/r1664582
Log:
More refactoring
Modified:
webservices/wss4j/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/util/XMLUtils.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDocInfo.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/WSSecSecurityContextToken.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/BinarySecurity.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DOMX509IssuerSerial.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DerivedKeyToken.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityContextToken.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityTokenReference.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/Timestamp.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/UsernameToken.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.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/SecurityContextTokenProcessor.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/X509Util.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/DerivedKeyTokenSTRParser.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/EncryptedKeySTRParser.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/STRParserUtil.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SecurityTokenRefSTRParser.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SignatureSTRParser.java
Modified: webservices/wss4j/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/util/XMLUtils.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/util/XMLUtils.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/util/XMLUtils.java (original)
+++ webservices/wss4j/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/util/XMLUtils.java Fri Mar 6 10:44:21 2015
@@ -36,6 +36,7 @@ import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+import org.w3c.dom.Text;
import org.xml.sax.InputSource;
public final class XMLUtils {
@@ -71,6 +72,30 @@ public final class XMLUtils {
}
return null;
}
+
+ /**
+ * Return the text content of an Element, or null if no such text content exists
+ */
+ public static String getElementText(Element e) {
+ if (e != null) {
+ Node node = e.getFirstChild();
+ StringBuilder builder = new StringBuilder();
+ boolean found = false;
+ while (node != null) {
+ if (Node.TEXT_NODE == node.getNodeType()) {
+ found = true;
+ builder.append(((Text)node).getData());
+ }
+ node = node.getNextSibling();
+ }
+
+ if (!found) {
+ return null;
+ }
+ return builder.toString();
+ }
+ return null;
+ }
public static String getNamespace(String prefix, Node e) {
while (e != null && e.getNodeType() == Node.ELEMENT_NODE) {
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDocInfo.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDocInfo.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDocInfo.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/WSDocInfo.java Fri Mar 6 10:44:21 2015
@@ -41,6 +41,7 @@ import javax.xml.crypto.dom.DOMCryptoCon
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.dom.message.CallbackLookup;
+import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -160,11 +161,9 @@ public class WSDocInfo {
* @return the token element or null if nothing found
*/
public Element getTokenElement(String uri) {
- String id = uri;
+ String id = WSSecurityUtil.getIDFromReference(uri);
if (id == null) {
return null;
- } else if (id.charAt(0) == '#') {
- id = id.substring(1);
}
TokenValue token = tokens.get(id);
@@ -190,11 +189,9 @@ public class WSDocInfo {
}
public void setTokenOnContext(String uri, DOMCryptoContext context) {
- String id = uri;
+ String id = WSSecurityUtil.getIDFromReference(uri);
if (id == null || context == null) {
return;
- } else if (id.charAt(0) == '#') {
- id = id.substring(1);
}
TokenValue tokenValue = tokens.get(id);
@@ -219,12 +216,11 @@ public class WSDocInfo {
* @return the WSSecurityEngineResult or null if nothing found
*/
public WSSecurityEngineResult getResult(String uri) {
- String id = uri;
+ String id = WSSecurityUtil.getIDFromReference(uri);
if (id == null) {
return null;
- } else if (id.charAt(0) == '#') {
- id = id.substring(1);
}
+
if (!results.isEmpty()) {
for (WSSecurityEngineResult result : results) {
String cId = (String)result.get(WSSecurityEngineResult.TAG_ID);
@@ -258,11 +254,9 @@ public class WSDocInfo {
* See whether we have a WSSecurityEngineResult of the given Integer tag for the given Id
*/
public boolean hasResult(Integer tag, String uri) {
- String id = uri;
+ String id = WSSecurityUtil.getIDFromReference(uri);
if (id == null || "".equals(uri)) {
return false;
- } else if (id.charAt(0) == '#') {
- id = id.substring(1);
}
if (!results.isEmpty()) {
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/WSSecSecurityContextToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/WSSecSecurityContextToken.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/WSSecSecurityContextToken.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/WSSecSecurityContextToken.java Fri Mar 6 10:44:21 2015
@@ -22,6 +22,7 @@ package org.apache.wss4j.dom.message;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.derivedKey.ConversationConstants;
+import org.apache.wss4j.dom.WSSConfig;
import org.apache.wss4j.dom.message.token.SecurityContextToken;
import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.w3c.dom.Document;
@@ -55,6 +56,14 @@ public class WSSecSecurityContextToken {
private byte[] secret;
private int wscVersion = ConversationConstants.DEFAULT_VERSION;
+ private WSSConfig wssConfig;
+
+ public WSSecSecurityContextToken() {
+ }
+
+ public WSSecSecurityContextToken(WSSConfig config) {
+ wssConfig = config;
+ }
public void prepare(Document doc, Crypto crypto) throws WSSecurityException {
@@ -68,9 +77,10 @@ public class WSSecSecurityContextToken {
}
// The wsu:Id of the wsc:SecurityContextToken
- if (sctId != null) {
- sct.setID(sctId);
+ if (sctId == null) {
+ sctId = getWsConfig().getIdAllocator().createId("TS-", sct);
}
+ sct.setID(sctId);
}
public void prependSCTElementToHeader(Document doc, WSSecHeader secHeader)
@@ -144,4 +154,10 @@ public class WSSecSecurityContextToken {
this.wscVersion = wscVersion;
}
+ private WSSConfig getWsConfig() {
+ if (wssConfig == null) {
+ wssConfig = WSSConfig.getNewInstance();
+ }
+ return wssConfig;
+ }
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/BinarySecurity.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/BinarySecurity.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/BinarySecurity.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/BinarySecurity.java Fri Mar 6 10:44:21 2015
@@ -26,6 +26,7 @@ import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.common.bsp.BSPRule;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.DOM2Writer;
+import org.apache.wss4j.common.util.XMLUtils;
import org.apache.wss4j.dom.bsp.BSPEnforcer;
import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.apache.xml.security.utils.Base64;
@@ -178,17 +179,12 @@ public class BinarySecurity {
* @return the byte array containing token information
*/
public byte[] getToken() {
- Node node = element.getFirstChild();
- StringBuilder builder = new StringBuilder();
- while (node != null) {
- if (Node.TEXT_NODE == node.getNodeType()) {
- builder.append(((Text)node).getData());
- }
- node = node.getNextSibling();
- }
-
try {
- return Base64.decode(builder.toString());
+ String text = XMLUtils.getElementText(element);
+ if (text == null) {
+ return null;
+ }
+ return Base64.decode(text);
} catch (Exception ex) {
if (LOG.isDebugEnabled()) {
LOG.debug(ex.getMessage(), ex);
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DOMX509IssuerSerial.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DOMX509IssuerSerial.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DOMX509IssuerSerial.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DOMX509IssuerSerial.java Fri Mar 6 10:44:21 2015
@@ -21,11 +21,10 @@ package org.apache.wss4j.dom.message.tok
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.common.util.DOM2Writer;
+import org.apache.wss4j.common.util.XMLUtils;
import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
import java.math.BigInteger;
@@ -49,13 +48,13 @@ public final class DOMX509IssuerSerial {
WSSecurityUtil.getDirectChildElement(
element, WSConstants.X509_ISSUER_NAME_LN, WSConstants.SIG_NS
);
- issuer = getChildText(issuerNameElement);
+ issuer = XMLUtils.getElementText(issuerNameElement);
Element serialNumberElement =
WSSecurityUtil.getDirectChildElement(
element, WSConstants.X509_SERIAL_NUMBER_LN, WSConstants.SIG_NS
);
- String serialNumberStr = getChildText(serialNumberElement);
+ String serialNumberStr = XMLUtils.getElementText(serialNumberElement);
if (serialNumberStr != null) {
serialNumber = new BigInteger(serialNumberStr);
} else {
@@ -130,19 +129,4 @@ public final class DOMX509IssuerSerial {
return DOM2Writer.nodeToString(element);
}
-
- private String getChildText(Node parentNode) {
- if (parentNode == null) {
- return null;
- }
- Node node = parentNode.getFirstChild();
- StringBuilder buffer = new StringBuilder();
- while (node != null) {
- if (Node.TEXT_NODE == node.getNodeType()) {
- buffer.append(((Text)node).getData());
- }
- node = node.getNextSibling();
- }
- return buffer.toString();
- }
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DerivedKeyToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DerivedKeyToken.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DerivedKeyToken.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/DerivedKeyToken.java Fri Mar 6 10:44:21 2015
@@ -243,17 +243,19 @@ public class DerivedKeyToken {
* @param properties The properties and values in a Map
*/
public void setProperties(Map<String, String> properties) {
- for (String key : properties.keySet()) {
- String propertyName = properties.get(key); //Get the property name
- //Check whether this property is already there
- //If so change the value
- Element node =
- WSSecurityUtil.findElement(elementProperties, propertyName, ns);
- if (node != null) { //If the node is not null
- Text node1 = getFirstNode(node);
- node1.setData(properties.get(propertyName));
- } else {
- addProperty(propertyName, properties.get(propertyName));
+ if (properties != null && !properties.isEmpty()) {
+ for (String key : properties.keySet()) {
+ String propertyName = properties.get(key); //Get the property name
+ //Check whether this property is already there
+ //If so change the value
+ Element node =
+ WSSecurityUtil.findElement(elementProperties, propertyName, ns);
+ if (node != null) { //If the node is not null
+ Text node1 = getFirstNode(node);
+ node1.setData(properties.get(propertyName));
+ } else {
+ addProperty(propertyName, properties.get(propertyName));
+ }
}
}
}
@@ -486,9 +488,7 @@ public class DerivedKeyToken {
SecurityTokenReference securityTokenReference = getSecurityTokenReference();
if (securityTokenReference.containsReference()) {
basetokenId = securityTokenReference.getReference().getURI();
- if (basetokenId.charAt(0) == '#') {
- basetokenId = basetokenId.substring(1);
- }
+ basetokenId = WSSecurityUtil.getIDFromReference(basetokenId);
} else {
// KeyIdentifier
basetokenId = securityTokenReference.getKeyIdentifierValue();
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityContextToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityContextToken.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityContextToken.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityContextToken.java Fri Mar 6 10:44:21 2015
@@ -22,7 +22,6 @@ package org.apache.wss4j.dom.message.tok
import javax.xml.namespace.QName;
import org.apache.wss4j.dom.WSConstants;
-import org.apache.wss4j.dom.WSSConfig;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.DOM2Writer;
import org.apache.wss4j.common.derivedKey.ConversationConstants;
@@ -45,8 +44,6 @@ public class SecurityContextToken {
*/
private Element elementIdentifier;
- private WSSConfig wssConfig;
-
private String tokenType = WSConstants.WSC_SCT;
/**
@@ -89,8 +86,6 @@ public class SecurityContextToken {
String uuid = IDGenerator.generateID("uuid:");
elementIdentifier.appendChild(doc.createTextNode(uuid));
-
- setID(getWSSConfig().getIdAllocator().createSecureId("sctId-", element));
}
/**
@@ -269,10 +264,4 @@ public class SecurityContextToken {
return true;
}
- private WSSConfig getWSSConfig() {
- if (wssConfig == null) {
- wssConfig = WSSConfig.getNewInstance();
- }
- return wssConfig;
- }
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityTokenReference.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityTokenReference.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityTokenReference.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/SecurityTokenReference.java Fri Mar 6 10:44:21 2015
@@ -28,13 +28,13 @@ import org.apache.wss4j.common.crypto.Me
import org.apache.wss4j.common.ext.WSPasswordCallback;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.DOM2Writer;
+import org.apache.wss4j.common.util.XMLUtils;
import org.apache.wss4j.dom.bsp.BSPEnforcer;
import org.apache.wss4j.dom.message.CallbackLookup;
import org.apache.wss4j.dom.message.DOMCallbackLookup;
import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.apache.xml.security.exceptions.Base64DecodingException;
import org.apache.xml.security.utils.Base64;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -251,10 +251,7 @@ public class SecurityTokenReference {
String uri,
String type
) throws WSSecurityException {
- String id = uri;
- if (id.charAt(0) == '#') {
- id = id.substring(1);
- }
+ String id = WSSecurityUtil.getIDFromReference(uri);
//
// Delegate finding the element to the CallbackLookup instance
//
@@ -286,10 +283,7 @@ public class SecurityTokenReference {
String uri,
String type
) throws WSSecurityException {
- String id = uri;
- if (id.charAt(0) == '#') {
- id = id.substring(1);
- }
+ String id = WSSecurityUtil.getIDFromReference(uri);
//
// Try to find it from the WSDocInfo instance first
//
@@ -486,14 +480,11 @@ public class SecurityTokenReference {
return new X509Certificate[]{cert};
}
} else if (THUMB_URI.equals(value)) {
- Node node = getFirstElement().getFirstChild();
- if (node == null) {
- return null;
- }
- if (Node.TEXT_NODE == node.getNodeType()) {
+ String text = XMLUtils.getElementText(getFirstElement());
+ if (text != null) {
byte[] thumb;
try {
- thumb = Base64.decode(((Text) node).getData());
+ thumb = Base64.decode(text);
} catch (Base64DecodingException e) {
throw new WSSecurityException(
WSSecurityException.ErrorCode.FAILURE, "decoding.general", e
@@ -513,13 +504,7 @@ public class SecurityTokenReference {
public String getKeyIdentifierValue() {
if (containsKeyIdentifier()) {
- Node node = getFirstElement().getFirstChild();
- if (node == null) {
- return null;
- }
- if (node.getNodeType() == Node.TEXT_NODE) {
- return ((Text) node).getData();
- }
+ return XMLUtils.getElementText(getFirstElement());
}
return null;
}
@@ -564,13 +549,10 @@ public class SecurityTokenReference {
if (skiBytes != null) {
return skiBytes;
}
- Node node = getFirstElement().getFirstChild();
- if (node == null) {
- return null;
- }
- if (node.getNodeType() == Node.TEXT_NODE) {
+ String text = XMLUtils.getElementText(getFirstElement());
+ if (text != null) {
try {
- skiBytes = Base64.decode(((Text) node).getData());
+ skiBytes = Base64.decode(text);
} catch (Exception e) {
LOG.debug(e.getMessage(), e);
return null;
@@ -658,17 +640,7 @@ public class SecurityTokenReference {
* a <code>wsse:Reference</code> element
*/
public boolean containsReference() {
- return lengthReference() > 0;
- }
-
- /**
- * Method lengthReference.
- *
- * @return number of <code>wsse:Reference</code> elements in
- * the <code>SecurityTokenReference</code>
- */
- public int lengthReference() {
- return length(WSConstants.WSSE_NS, "Reference");
+ return containsElement(WSConstants.WSSE_NS, "Reference");
}
/**
@@ -678,7 +650,7 @@ public class SecurityTokenReference {
* a <code>ds:IssuerSerial</code> element
*/
public boolean containsX509IssuerSerial() {
- return lengthX509IssuerSerial() > 0;
+ return containsElement(WSConstants.SIG_NS, WSConstants.X509_ISSUER_SERIAL_LN);
}
/**
@@ -688,27 +660,7 @@ public class SecurityTokenReference {
* a <code>ds:X509Data</code> element
*/
public boolean containsX509Data() {
- return lengthX509Data() > 0;
- }
-
- /**
- * Method lengthX509IssuerSerial.
- *
- * @return number of <code>ds:IssuerSerial</code> elements in
- * the <code>SecurityTokenReference</code>
- */
- public int lengthX509IssuerSerial() {
- return length(WSConstants.SIG_NS, WSConstants.X509_ISSUER_SERIAL_LN);
- }
-
- /**
- * Method lengthX509Data.
- *
- * @return number of <code>ds:IssuerSerial</code> elements in
- * the <code>SecurityTokenReference</code>
- */
- public int lengthX509Data() {
- return length(WSConstants.SIG_NS, WSConstants.X509_DATA_LN);
+ return containsElement(WSConstants.SIG_NS, WSConstants.X509_DATA_LN);
}
/**
@@ -718,28 +670,10 @@ public class SecurityTokenReference {
* a <code>wsse:KeyIdentifier</code> element
*/
public boolean containsKeyIdentifier() {
- return lengthKeyIdentifier() > 0;
+ return containsElement(WSConstants.WSSE_NS, "KeyIdentifier");
}
- /**
- * Method lengthKeyIdentifier.
- *
- * @return number of <code>wsse:KeyIdentifier</code> elements in
- * the <code>SecurityTokenReference</code>
- */
- public int lengthKeyIdentifier() {
- return length(WSConstants.WSSE_NS, "KeyIdentifier");
- }
-
- /**
- * Method length.
- *
- * @param namespace
- * @param localname
- * @return number of elements with matching localname and namespace
- */
- public int length(String namespace, String localname) {
- int result = 0;
+ private boolean containsElement(String namespace, String localname) {
Node node = element.getFirstChild();
while (node != null) {
if (Node.ELEMENT_NODE == node.getNodeType()) {
@@ -749,12 +683,12 @@ public class SecurityTokenReference {
|| namespace == null && ns == null)
&& localname.equals(name)
) {
- result++;
+ return true;
}
}
node = node.getNextSibling();
}
- return result;
+ return false;
}
/**
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/Timestamp.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/Timestamp.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/Timestamp.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/Timestamp.java Fri Mar 6 10:44:21 2015
@@ -21,9 +21,7 @@ package org.apache.wss4j.dom.message.tok
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Date;
-import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
@@ -53,7 +51,6 @@ import org.w3c.dom.Text;
public class Timestamp {
private Element element;
- private List<Element> customElements = new ArrayList<>();
private Date createdDate;
private Date expiresDate;
@@ -110,7 +107,6 @@ public class Timestamp {
}
} else {
bspEnforcer.handleBSPRule(BSPRule.R3222);
- customElements.add(currentChildElement);
}
}
}
@@ -264,23 +260,6 @@ public class Timestamp {
}
/**
- * Creates and adds a custom element to this Timestamp
- */
- public void addCustomElement(Document doc, Element customElement) {
- customElements.add(customElement);
- element.appendChild(customElement);
- }
-
- /**
- * Get the the custom elements from this Timestamp
- *
- * @return the list containing the custom elements.
- */
- public List<Element> getCustomElements() {
- return customElements;
- }
-
- /**
* Set wsu:Id attribute of this timestamp
* @param id
*/
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/UsernameToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/UsernameToken.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/UsernameToken.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/message/token/UsernameToken.java Fri Mar 6 10:44:21 2015
@@ -42,6 +42,7 @@ import org.apache.wss4j.common.util.Date
import org.apache.wss4j.common.util.UsernameTokenUtil;
import org.apache.wss4j.common.util.WSCurrentTimeSource;
import org.apache.wss4j.common.util.WSTimeSource;
+import org.apache.wss4j.common.util.XMLUtils;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.WSSConfig;
import org.apache.wss4j.dom.bsp.BSPEnforcer;
@@ -72,7 +73,7 @@ public class UsernameToken {
org.slf4j.LoggerFactory.getLogger(UsernameToken.class);
private static final boolean DO_DEBUG = LOG.isDebugEnabled();
- private Element element ;
+ private Element element;
private Element elementUsername;
private Element elementPassword;
private Element elementNonce;
@@ -164,7 +165,7 @@ public class UsernameToken {
// Guard against a malicious user sending a bogus iteration value
if (elementIteration != null) {
- String iter = nodeString(elementIteration);
+ String iter = XMLUtils.getElementText(elementIteration);
if (iter != null) {
int iterInt = Integer.parseInt(iter);
if (iterInt < 0 || iterInt > 10000) {
@@ -391,7 +392,7 @@ public class UsernameToken {
* @return the data from the user name element.
*/
public String getName() {
- return nodeString(elementUsername);
+ return XMLUtils.getElementText(elementUsername);
}
/**
@@ -411,7 +412,7 @@ public class UsernameToken {
* @return the data from the nonce element.
*/
public String getNonce() {
- return nodeString(elementNonce);
+ return XMLUtils.getElementText(elementNonce);
}
/**
@@ -420,7 +421,7 @@ public class UsernameToken {
* @return the data from the created time element.
*/
public String getCreated() {
- return nodeString(elementCreated);
+ return XMLUtils.getElementText(elementCreated);
}
/**
@@ -439,7 +440,7 @@ public class UsernameToken {
* @return the password string or <code>null</code> if no such node exists.
*/
public String getPassword() {
- String password = nodeString(elementPassword);
+ String password = XMLUtils.getElementText(elementPassword);
// See WSS-219
if (password == null && elementPassword != null) {
return "";
@@ -462,7 +463,7 @@ public class UsernameToken {
* @throws WSSecurityException
*/
public byte[] getSalt() throws WSSecurityException {
- String salt = nodeString(elementSalt);
+ String salt = XMLUtils.getElementText(elementSalt);
if (salt != null) {
try {
return Base64.decode(salt);
@@ -483,7 +484,7 @@ public class UsernameToken {
* is returned.
*/
public int getIteration() {
- String iter = nodeString(elementIteration);
+ String iter = XMLUtils.getElementText(elementIteration);
if (iter != null) {
return Integer.parseInt(iter);
}
@@ -639,34 +640,6 @@ public class UsernameToken {
}
/**
- * Returns the data of an element as String or null if either the the element
- * does not contain a Text node or the node is empty.
- *
- * @param e DOM element
- * @return Element text node data as String
- */
- private String nodeString(Element e) {
- if (e != null) {
- Node node = e.getFirstChild();
- StringBuilder builder = new StringBuilder();
- boolean found = false;
- while (node != null) {
- if (Node.TEXT_NODE == node.getNodeType()) {
- found = true;
- builder.append(((Text)node).getData());
- }
- node = node.getNextSibling();
- }
-
- if (!found) {
- return null;
- }
- return builder.toString();
- }
- return null;
- }
-
- /**
* Returns the dom element of this <code>UsernameToken</code> object.
*
* @return the <code>wsse:UsernameToken</code> element
@@ -725,7 +698,7 @@ public class UsernameToken {
// we must have an iteration element to use this token for a derived key
bspEnforcer.handleBSPRule(BSPRule.R4218);
} else {
- String iter = nodeString(elementIteration);
+ String iter = XMLUtils.getElementText(elementIteration);
if (iter == null || Integer.parseInt(iter) < 1000) {
bspEnforcer.handleBSPRule(BSPRule.R4218);
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java Fri Mar 6 10:44:21 2015
@@ -39,13 +39,13 @@ import javax.crypto.spec.PSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import org.w3c.dom.Text;
import org.apache.wss4j.common.bsp.BSPRule;
import org.apache.wss4j.common.crypto.AlgorithmSuite;
import org.apache.wss4j.common.crypto.AlgorithmSuiteValidator;
import org.apache.wss4j.common.crypto.CryptoType;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.KeyUtils;
+import org.apache.wss4j.common.util.XMLUtils;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.WSDataRef;
import org.apache.wss4j.dom.WSDocInfo;
@@ -306,10 +306,7 @@ public class EncryptedKeyProcessor imple
&& WSConstants.ENC_NS.equals(node.getNamespaceURI())
&& "DataReference".equals(node.getLocalName())) {
String dataRefURI = ((Element) node).getAttributeNS(null, "URI");
- if (dataRefURI.charAt(0) == '#') {
- dataRefURI = dataRefURI.substring(1);
- }
- return dataRefURI;
+ return WSSecurityUtil.getIDFromReference(dataRefURI);
}
}
}
@@ -324,17 +321,12 @@ public class EncryptedKeyProcessor imple
* @throws WSSecurityException
*/
private static byte[] getDecodedBase64EncodedData(Element element) throws WSSecurityException {
- StringBuilder sb = new StringBuilder();
- Node node = element.getFirstChild();
- while (node != null) {
- if (Node.TEXT_NODE == node.getNodeType()) {
- sb.append(((Text) node).getData());
- }
- node = node.getNextSibling();
- }
- String encodedData = sb.toString();
try {
- return Base64.decode(encodedData);
+ String text = XMLUtils.getElementText(element);
+ if (text == null) {
+ return null;
+ }
+ return Base64.decode(text);
} catch (Base64DecodingException e) {
throw new WSSecurityException(
WSSecurityException.ErrorCode.FAILURE, "decoding.general", e
@@ -438,7 +430,7 @@ public class EncryptedKeyProcessor imple
cryptoType.setIssuerSerial(issuerSerial.getIssuer(), issuerSerial.getSerialNumber());
return data.getDecCrypto().getX509Certificates(cryptoType);
} else if (WSConstants.X509_CERT_LN.equals(x509Child.getLocalName())) {
- byte[] token = getToken(x509Child);
+ byte[] token = getDecodedBase64EncodedData(x509Child);
if (token == null) {
throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, "invalidCertData", 0);
}
@@ -471,26 +463,6 @@ public class EncryptedKeyProcessor imple
return null;
}
- private byte[] getToken(Element element) {
- Node node = element.getFirstChild();
- StringBuilder builder = new StringBuilder();
- while (node != null) {
- if (Node.TEXT_NODE == node.getNodeType()) {
- builder.append(((Text)node).getData());
- }
- node = node.getNextSibling();
- }
-
- try {
- return Base64.decode(builder.toString());
- } catch (Exception ex) {
- if (LOG.isDebugEnabled()) {
- LOG.debug(ex.getMessage(), ex);
- }
- return null;
- }
- }
-
/**
* Decrypt all data references
*/
@@ -511,9 +483,7 @@ public class EncryptedKeyProcessor imple
&& WSConstants.ENC_NS.equals(node.getNamespaceURI())
&& "DataReference".equals(node.getLocalName())) {
String dataRefURI = ((Element) node).getAttributeNS(null, "URI");
- if (dataRefURI.charAt(0) == '#') {
- dataRefURI = dataRefURI.substring(1);
- }
+ dataRefURI = WSSecurityUtil.getIDFromReference(dataRefURI);
WSDataRef dataRef =
decryptDataRef(refList.getOwnerDocument(), dataRefURI, docInfo, decryptedBytes, data);
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=1664582&r1=1664581&r2=1664582&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 Mar 6 10:44:21 2015
@@ -109,9 +109,7 @@ public class ReferenceListProcessor impl
&& WSConstants.ENC_NS.equals(node.getNamespaceURI())
&& "DataReference".equals(node.getLocalName())) {
String dataRefURI = ((Element) node).getAttributeNS(null, "URI");
- if (dataRefURI.charAt(0) == '#') {
- dataRefURI = dataRefURI.substring(1);
- }
+ dataRefURI = WSSecurityUtil.getIDFromReference(dataRefURI);
// See whether we have already processed the encrypted node
if (!wsDocInfo.hasResult(WSConstants.ENCR, dataRefURI)) {
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SecurityContextTokenProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SecurityContextTokenProcessor.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SecurityContextTokenProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SecurityContextTokenProcessor.java Fri Mar 6 10:44:21 2015
@@ -26,6 +26,7 @@ import org.apache.wss4j.common.ext.WSPas
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.dom.handler.RequestData;
import org.apache.wss4j.dom.message.token.SecurityContextToken;
+import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.apache.wss4j.dom.validate.Credential;
import org.apache.wss4j.dom.validate.Validator;
import org.w3c.dom.Element;
@@ -69,9 +70,8 @@ public class SecurityContextTokenProcess
result.put(WSSecurityEngineResult.TAG_SECRET, returnedCredential.getSecretKey());
} else {
String id = sct.getID();
- if (!"".equals(id) && id.charAt(0) == '#') {
- id = id.substring(1);
- }
+ id = WSSecurityUtil.getIDFromReference(id);
+
byte[] secret = null;
try {
secret = getSecret(data.getCallbackHandler(), sct.getIdentifier());
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/X509Util.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/X509Util.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/X509Util.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/X509Util.java Fri Mar 6 10:44:21 2015
@@ -23,10 +23,10 @@ import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.common.ext.WSPasswordCallback;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.KeyUtils;
+import org.apache.wss4j.common.util.XMLUtils;
import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import org.w3c.dom.Text;
import javax.crypto.SecretKey;
import javax.security.auth.callback.Callback;
@@ -84,16 +84,7 @@ public final class X509Util {
keyInfoElem, "KeyName", WSConstants.SIG_NS
);
if (keyNmElem != null) {
-
- Node node = keyNmElem.getFirstChild();
- StringBuilder builder = new StringBuilder();
- while (node != null) {
- if (Node.TEXT_NODE == node.getNodeType()) {
- builder.append(((Text)node).getData());
- }
- node = node.getNextSibling();
- }
- keyName = builder.toString();
+ keyName = XMLUtils.getElementText(keyNmElem);
}
if (keyName == null || keyName.length() <= 0) {
LOG.debug("No Key Name available");
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/DerivedKeyTokenSTRParser.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/DerivedKeyTokenSTRParser.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/DerivedKeyTokenSTRParser.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/DerivedKeyTokenSTRParser.java Fri Mar 6 10:44:21 2015
@@ -65,9 +65,7 @@ public class DerivedKeyTokenSTRParser im
String uri = null;
if (secRef.containsReference()) {
uri = secRef.getReference().getURI();
- if (uri.charAt(0) == '#') {
- uri = uri.substring(1);
- }
+ uri = WSSecurityUtil.getIDFromReference(uri);
} else if (secRef.containsKeyIdentifier()) {
uri = secRef.getKeyIdentifierValue();
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/EncryptedKeySTRParser.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/EncryptedKeySTRParser.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/EncryptedKeySTRParser.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/EncryptedKeySTRParser.java Fri Mar 6 10:44:21 2015
@@ -37,6 +37,7 @@ import org.apache.wss4j.dom.message.toke
import org.apache.wss4j.dom.message.token.SecurityTokenReference;
import org.apache.wss4j.dom.message.token.X509Security;
import org.apache.wss4j.dom.saml.WSSSAMLKeyInfoProcessor;
+import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.w3c.dom.Element;
/**
@@ -66,9 +67,7 @@ public class EncryptedKeySTRParser imple
String uri = null;
if (secRef.containsReference()) {
uri = secRef.getReference().getURI();
- if (uri.charAt(0) == '#') {
- uri = uri.substring(1);
- }
+ uri = WSSecurityUtil.getIDFromReference(uri);
} else if (secRef.containsKeyIdentifier()) {
uri = secRef.getKeyIdentifierValue();
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/STRParserUtil.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/STRParserUtil.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/STRParserUtil.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/STRParserUtil.java Fri Mar 6 10:44:21 2015
@@ -39,6 +39,7 @@ import org.apache.wss4j.dom.message.toke
import org.apache.wss4j.dom.message.token.SecurityTokenReference;
import org.apache.wss4j.dom.message.token.X509Security;
import org.apache.wss4j.dom.processor.Processor;
+import org.apache.wss4j.dom.util.WSSecurityUtil;
import org.w3c.dom.Element;
/**
@@ -264,11 +265,9 @@ public final class STRParserUtil {
int identifier,
RequestData data
) throws WSSecurityException {
- if (id.charAt(0) == '#') {
- id = id.substring(1);
- }
+ String uri = WSSecurityUtil.getIDFromReference(id);
WSPasswordCallback pwcb =
- new WSPasswordCallback(id, null, type, identifier);
+ new WSPasswordCallback(uri, null, type, identifier);
try {
Callback[] callbacks = new Callback[]{pwcb};
if (data.getCallbackHandler() != null) {
@@ -278,7 +277,7 @@ public final class STRParserUtil {
} catch (Exception e) {
throw new WSSecurityException(
WSSecurityException.ErrorCode.FAILURE,
- "noPassword", e, id);
+ "noPassword", e, uri);
}
return null;
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SecurityTokenRefSTRParser.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SecurityTokenRefSTRParser.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SecurityTokenRefSTRParser.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SecurityTokenRefSTRParser.java Fri Mar 6 10:44:21 2015
@@ -72,9 +72,7 @@ public class SecurityTokenRefSTRParser i
String uri = null;
if (secRef.containsReference()) {
uri = secRef.getReference().getURI();
- if (uri.charAt(0) == '#') {
- uri = uri.substring(1);
- }
+ uri = WSSecurityUtil.getIDFromReference(uri);
} else if (secRef.containsKeyIdentifier()) {
uri = secRef.getKeyIdentifierValue();
}
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SignatureSTRParser.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SignatureSTRParser.java?rev=1664582&r1=1664581&r2=1664582&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SignatureSTRParser.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/str/SignatureSTRParser.java Fri Mar 6 10:44:21 2015
@@ -87,9 +87,7 @@ public class SignatureSTRParser implemen
String uri = null;
if (secRef.containsReference()) {
uri = secRef.getReference().getURI();
- if (uri.charAt(0) == '#') {
- uri = uri.substring(1);
- }
+ uri = WSSecurityUtil.getIDFromReference(uri);
} else if (secRef.containsKeyIdentifier()) {
uri = secRef.getKeyIdentifierValue();
}