Author: coheigea
Date: Mon Mar 30 16:04:38 2009
New Revision: 760024
URL: http://svn.apache.org/viewvc?rev=760024&view=rev
Log:
Backmerged Dan's changes on hashcodes + generating IDs.
- This has an implication for the Axis WSDOAllSender, where the wssConfig must
not be created each time a request is made.
- This is for the scenario that two handlers are chained together...they'll
have the same ID's if wssConfig is created per handler.
Added:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WsuIdAllocator.java
- copied unchanged from r757531,
webservices/wss4j/trunk/src/org/apache/ws/security/WsuIdAllocator.java
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java
webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
Mon Mar 30 16:04:38 2009
@@ -25,6 +25,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.ws.axis.security.handler.WSDoAllHandler;
import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSSConfig;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.handler.RequestData;
import org.apache.ws.security.handler.WSHandlerConstants;
@@ -44,6 +45,7 @@
protected static Log log =
LogFactory.getLog(WSDoAllSender.class.getName());
private static Log tlog =
LogFactory.getLog("org.apache.ws.security.TIME");
+ private static WSSConfig wssConfig = WSSConfig.getNewInstance();
/**
* Axis calls invoke to handle a message. <p/>
@@ -67,6 +69,7 @@
}
RequestData reqData = new RequestData();
+ reqData.setWssConfig(wssConfig);
reqData.setMsgContext(mc);
/*
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
Mon Mar 30 16:04:38 2009
@@ -33,20 +33,22 @@
import org.apache.ws.security.components.crypto.Crypto;
import org.apache.ws.security.processor.Processor;
+
+import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.util.Enumeration;
import java.util.Vector;
public class WSDocInfo {
- int hash;
+ Document doc = null;
Crypto crypto = null;
Vector bst = null;
Element assertion = null;
Vector processors = null;
- public WSDocInfo(int hash) {
- this.hash = hash;
+ public WSDocInfo(Document doc) {
+ this.doc = doc;
}
/**
@@ -134,10 +136,10 @@
}
/**
- * @return the hash value of the document
+ * @return the document
*/
- public int getHash() {
- return hash;
+ public Document getDocument() {
+ return doc;
}
/**
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
Mon Mar 30 16:04:38 2009
@@ -30,32 +30,21 @@
import java.util.Hashtable;
+import org.w3c.dom.Document;
+
public class WSDocInfoStore {
static Hashtable storage = new Hashtable(10);
- public static WSDocInfo lookup(int hash) {
- Integer intObj = new Integer(hash);
- return (WSDocInfo) storage.get(intObj);
- }
-
- public static void store(WSDocInfo info) {
- Integer intObj = new Integer(info.getHash());
- if (storage.containsKey(intObj)) {
- return;
- }
- storage.put(intObj, info);
+ public static WSDocInfo lookup(Document doc) {
+ return (WSDocInfo) storage.get(doc);
}
- public static void delete(int hash) {
- Integer intObj = new Integer(hash);
- WSDocInfo wsInfo = (WSDocInfo) storage.get(intObj);
- if (wsInfo != null) {
- storage.remove(intObj);
- }
+ public static boolean store(WSDocInfo info) {
+ return storage.put(info.getDocument(), info) == null;
}
public static void delete(WSDocInfo info) {
- delete(info.getHash());
+ storage.remove(info.getDocument());
}
}
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
Mon Mar 30 16:04:38 2009
@@ -27,6 +27,7 @@
import org.apache.ws.security.processor.Processor;
import org.apache.ws.security.transform.STRTransform;
import org.apache.ws.security.util.Loader;
+import org.apache.ws.security.util.UUIDGenerator;
import org.apache.xml.security.transforms.Transform;
/**
@@ -194,6 +195,26 @@
* reject custom token types in the callback handler.
*/
protected boolean handleCustomPasswordTypes = false;
+
+ protected WsuIdAllocator idAllocator = new WsuIdAllocator() {
+ int i;
+ private synchronized String next() {
+ return Integer.toString(++i);
+ }
+ public String createId(String prefix, Object o) {
+ if (prefix == null) {
+ return next();
+ }
+ return prefix + next();
+ }
+
+ public String createSecureId(String prefix, Object o) {
+ if (prefix == null) {
+ return UUIDGenerator.getUUID();
+ }
+ return prefix + UUIDGenerator.getUUID();
+ }
+ };
protected HashMap jceProvider = new HashMap(10);
@@ -374,6 +395,17 @@
}
/**
+ * @return Returns the WsuIdAllocator used to generate wsu:Id attributes
+ */
+ public WsuIdAllocator getIdAllocator() {
+ return idAllocator;
+ }
+
+ public void setIdAllocator(WsuIdAllocator idAllocator) {
+ this.idAllocator = idAllocator;
+ }
+
+ /**
* Associate an action name with a specific action code.
*
* This operation allows applications to supply their own
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
Mon Mar 30 16:04:38 2009
@@ -298,7 +298,7 @@
* it for retrieval. Store the implementation of signature crypto
* (no need for encryption --- yet)
*/
- WSDocInfo wsDocInfo = new
WSDocInfo(securityHeader.getOwnerDocument().hashCode());
+ WSDocInfo wsDocInfo = new WSDocInfo(securityHeader.getOwnerDocument());
wsDocInfo.setCrypto(sigCrypto);
NodeList list = securityHeader.getChildNodes();
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
Mon Mar 30 16:04:38 2009
@@ -205,7 +205,7 @@
id = bodyElement.getAttributeNS(WSConstants.WSU_NS, "Id");
if ((id == null) || (id.length() == 0)) {
- id = "id-" + Integer.toString(bodyElement.hashCode());
+ id = wssConfig.getIdAllocator().createId("id-", bodyElement);
String prefix = WSSecurityUtil.setNamespace(bodyElement,
WSConstants.WSU_NS, WSConstants.WSU_PREFIX);
bodyElement.setAttributeNS(WSConstants.WSU_NS, prefix + ":Id", id);
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
Mon Mar 30 16:04:38 2009
@@ -346,7 +346,6 @@
}
remoteCert = certs[0];
}
- String certUri = "EncCertId-" + remoteCert.hashCode();
if (tlog.isDebugEnabled()) {
t2 = System.currentTimeMillis();
}
@@ -429,6 +428,7 @@
case WSConstants.BST_DIRECT_REFERENCE:
Reference ref = new Reference(doc);
+ String certUri =
wssConfig.getIdAllocator().createId("EncCertId-", remoteCert);
ref.setURI("#" + certUri);
BinarySecurity bstToken = null;
bstToken = new X509Security(doc);
@@ -520,7 +520,7 @@
}
boolean content = modifier.equals("Content") ? true : false;
- String xencEncryptedDataId = "EncDataId-" + body.hashCode();
+ String xencEncryptedDataId =
wssConfig.getIdAllocator().createId("EncDataId-", body);
/*
* Forth step: encrypt data, and set neccessary attributes in
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
Mon Mar 30 16:04:38 2009
@@ -131,7 +131,7 @@
String id = bodyElement.getAttributeNS(WSConstants.WSU_NS, "Id");
if ((id == null) || (id.length() == 0)) {
- id = "id-" + Integer.toString(bodyElement.hashCode());
+ id = wssConfig.getIdAllocator().createId("id-", bodyElement);
String prefix =
WSSecurityUtil.setNamespace(bodyElement, WSConstants.WSU_NS,
WSConstants.WSU_PREFIX);
bodyElement.setAttributeNS(WSConstants.WSU_NS, prefix + ":Id", id);
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
Mon Mar 30 16:04:38 2009
@@ -127,7 +127,7 @@
}
boolean content = modifier.equals("Content") ? true : false;
- String xencEncryptedDataId = "EncDataId-" + body.hashCode();
+ String xencEncryptedDataId =
wssConfig.getIdAllocator().createId("EncDataId-", body);
//
// Fourth step: encrypt data, and set necessary attributes in
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
Mon Mar 30 16:04:38 2009
@@ -112,7 +112,7 @@
public void prepare(Document doc, WSSecHeader secHeader)
throws WSSecurityException, ConversationException {
super.prepare(doc);
- wsDocInfo = new WSDocInfo(doc.hashCode());
+ wsDocInfo = new WSDocInfo(doc);
//
// Get and initialize a XMLSignature element.
@@ -150,15 +150,15 @@
}
sig.addResourceResolver(EnvelopeIdResolver.getInstance());
- String sigUri = "Signature-" + sig.hashCode();
+ String sigUri = wssConfig.getIdAllocator().createId("Signature-", sig);
sig.setId(sigUri);
keyInfo = sig.getKeyInfo();
- keyInfoUri = "KeyId-" + keyInfo.hashCode();
+ keyInfoUri = wssConfig.getIdAllocator().createSecureId("KeyId-",
keyInfo);
keyInfo.setId(keyInfoUri);
secRef = new SecurityTokenReference(doc);
- strUri = "STRId-" + secRef.hashCode();
+ strUri = wssConfig.getIdAllocator().createSecureId("STRId-", secRef);
secRef.setID(strUri);
Reference refUt = new Reference(document);
@@ -411,7 +411,7 @@
* @throws WSSecurityException
*/
public void computeSignature() throws WSSecurityException {
- WSDocInfoStore.store(wsDocInfo);
+ boolean remove = WSDocInfoStore.store(wsDocInfo);
try {
sig.sign(sig.createSecretKey(derivedKeyBytes));
signatureValue = sig.getSignatureValue();
@@ -424,7 +424,9 @@
WSSecurityException.FAILED_SIGNATURE, null, null, e1
);
} finally {
- WSDocInfoStore.delete(wsDocInfo);
+ if (remove) {
+ WSDocInfoStore.delete(wsDocInfo);
+ }
}
}
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
Mon Mar 30 16:04:38 2009
@@ -195,7 +195,7 @@
// Add the DKTs
dkt = new DerivedKeyToken(this.wscVersion, document);
- dktId = "derivedKeyId-" + dkt.hashCode();
+ dktId = wssConfig.getIdAllocator().createId("derivedKeyId-", dkt);
dkt.setOffset(offset);
dkt.setLength(length);
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
Mon Mar 30 16:04:38 2009
@@ -495,7 +495,7 @@
}
boolean content = modifier.equals("Content") ? true : false;
- String xencEncryptedDataId = "EncDataId-" + body.hashCode();
+ String xencEncryptedDataId =
wssConfig.getIdAllocator().createId("EncDataId-", body);
encPart.setEncId(xencEncryptedDataId);
cloneKeyInfo = true;
@@ -534,7 +534,8 @@
String wsuPrefix =
WSSecurityUtil.setNamespace(elem, WSConstants.WSU_NS,
WSConstants.WSU_PREFIX);
elem.setAttributeNS(
- WSConstants.WSU_NS, wsuPrefix + ":Id", "EncHeader-" +
body.hashCode()
+ WSConstants.WSU_NS, wsuPrefix + ":Id",
+ wssConfig.getIdAllocator().createId("EncHeader-", body)
);
NamedNodeMap map = body.getAttributes();
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
Mon Mar 30 16:04:38 2009
@@ -289,7 +289,7 @@
//
crypto = cr;
document = doc;
- wsDocInfo = new WSDocInfo(doc.hashCode());
+ wsDocInfo = new WSDocInfo(doc);
wsDocInfo.setCrypto(cr);
//
@@ -314,7 +314,7 @@
new Object[] { user, "signature" }
);
}
- certUri = "CertId-" + certs[0].hashCode();
+ certUri = wssConfig.getIdAllocator().createSecureId("CertId-",
certs[0]);
//
// If no signature algorithm was set try to detect it according to
the
// data stored in the certificate.
@@ -371,17 +371,16 @@
}
sig.addResourceResolver(EnvelopeIdResolver.getInstance());
- String sigUri = "Signature-" + sig.hashCode();
- sig.setId(sigUri);
+ sig.setId(wssConfig.getIdAllocator().createId("Signature-", sig));
keyInfo = sig.getKeyInfo();
- keyInfoUri = "KeyId-" + keyInfo.hashCode();
+ keyInfoUri = wssConfig.getIdAllocator().createSecureId("KeyId-",
keyInfo);
keyInfo.setId(keyInfoUri);
secRef = new SecurityTokenReference(doc);
- strUri = "STRId-" + secRef.hashCode();
+ strUri = wssConfig.getIdAllocator().createSecureId("STRId-", secRef);
secRef.setID(strUri);
-
+
//
// Prepare and setup the token references for this Signature
//
@@ -691,7 +690,7 @@
* @throws WSSecurityException
*/
public void computeSignature() throws WSSecurityException {
- WSDocInfoStore.store(wsDocInfo);
+ boolean remove = WSDocInfoStore.store(wsDocInfo);
try {
if (keyIdentifierType == WSConstants.UT_SIGNING ||
keyIdentifierType == WSConstants.CUSTOM_SYMM_SIGNING ||
@@ -716,7 +715,9 @@
WSSecurityException.FAILED_SIGNATURE, null, null, e1
);
} finally {
- WSDocInfoStore.delete(wsDocInfo);
+ if (remove) {
+ WSDocInfoStore.delete(wsDocInfo);
+ }
}
}
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
Mon Mar 30 16:04:38 2009
@@ -65,8 +65,7 @@
*/
public void prepare(Document doc) {
sc = new SignatureConfirmation(doc, signatureValue);
- String scId = "SigConf-" + sc.hashCode();
- sc.setID(scId);
+ sc.setID(wssConfig.getIdAllocator().createId("SigConf-", sc));
}
/**
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
Mon Mar 30 16:04:38 2009
@@ -68,7 +68,7 @@
*/
public void prepare(Document doc) {
ts = new Timestamp(wssConfig.isPrecisionInMilliSeconds(), doc,
timeToLive);
- String tsId = "Timestamp-" + ts.hashCode();
+ String tsId = wssConfig.getIdAllocator().createId("Timestamp-", ts);
ts.setID(tsId);
}
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
Mon Mar 30 16:04:38 2009
@@ -184,8 +184,7 @@
if (created) {
ut.addCreated(wssConfig.isPrecisionInMilliSeconds(), doc);
}
- String utId = "UsernameToken-" + ut.hashCode();
- ut.setID(utId);
+ ut.setID(wssConfig.getIdAllocator().createId("UsernameToken-", ut));
}
/**
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
Mon Mar 30 16:04:38 2009
@@ -240,7 +240,7 @@
* Gather some info about the document to process and store it for
* retrieval
*/
- WSDocInfo wsDocInfo = new WSDocInfo(doc.hashCode());
+ WSDocInfo wsDocInfo = new WSDocInfo(doc);
wsDocInfo.setCrypto(crypto);
Element envelope = doc.getDocumentElement();
@@ -261,7 +261,7 @@
new Object[] { user, "signature" }
);
}
- certUri = "CertId-" + certs[0].hashCode();
+ certUri = wssConfig.getIdAllocator().createSecureId("CertId-",
certs[0]);
if (sigAlgo == null) {
String pubKeyAlgo = certs[0].getPublicKey().getAlgorithm();
log.debug("automatic sig algo detection: " + pubKeyAlgo);
@@ -326,12 +326,12 @@
*/
KeyInfo info = sig.getKeyInfo();
- String keyInfoUri = "KeyId-" + info.hashCode();
+ String keyInfoUri =
wssConfig.getIdAllocator().createSecureId("KeyId-", info);
info.setId(keyInfoUri);
SecurityTokenReference secRef = new SecurityTokenReference(doc);
- String strUri = "STRId-" + secRef.hashCode();
- secRef.setID(strUri);
+ String secRefId = wssConfig.getIdAllocator().createSecureId("STRId-",
info);
+ secRef.setID(secRefId);
if (tlog.isDebugEnabled()) {
t1 = System.currentTimeMillis();
@@ -415,7 +415,7 @@
transforms = new Transforms(doc);
transforms.addTransform(
STRTransform.implementedTransformURI, ctx);
- sig.addDocument("#" + strUri, transforms);
+ sig.addDocument("#" + secRefId, transforms);
} else if (elemName.equals("Assertion")) { // Assertion
String id = null;
@@ -521,7 +521,7 @@
refUt.setValueType(WSConstants.USERNAMETOKEN_NS +
"#UsernameToken");
String utId = usernameToken.getId();
if (utId == null) {
- utId = "usernameTokenId-" + usernameToken.hashCode();
+ utId = wssConfig.getIdAllocator().createId("usernameTokenId-",
usernameToken);
usernameToken.setId(utId);
}
refUt.setURI("#" + utId);
@@ -542,7 +542,7 @@
}
info.addUnknownElement(secRef.getElement());
- WSDocInfoStore.store(wsDocInfo);
+ boolean remove = WSDocInfoStore.store(wsDocInfo);
try {
if (keyIdentifierType == WSConstants.UT_SIGNING) {
sig.sign(sig.createSecretKey(secretKey));
@@ -557,7 +557,9 @@
throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
null, null, e1);
} finally {
- WSDocInfoStore.delete(wsDocInfo);
+ if (remove) {
+ WSDocInfoStore.delete(wsDocInfo);
+ }
}
if (tlog.isDebugEnabled()) {
t4 = System.currentTimeMillis();
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
Mon Mar 30 16:04:38 2009
@@ -18,6 +18,7 @@
package org.apache.ws.security.message.token;
import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSSConfig;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.conversation.ConversationConstants;
import org.apache.ws.security.conversation.ConversationException;
@@ -88,7 +89,7 @@
this.elementIdentifier.appendChild(doc.createTextNode(uuid));
- this.setID("sctId-" + this.element.hashCode());
+
this.setID(WSSConfig.getDefaultWSConfig().getIdAllocator().createSecureId("sctId-",
this.element));
}
/**
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
Mon Mar 30 16:04:38 2009
@@ -86,7 +86,7 @@
if (log.isDebugEnabled()) {
log.debug("Found signature element");
}
- WSDocInfoStore.store(wsDocInfo);
+ boolean remove = WSDocInfoStore.store(wsDocInfo);
X509Certificate[] returnCert = new X509Certificate[1];
Set returnElements = new HashSet();
List protectedElements = new java.util.ArrayList();
@@ -97,12 +97,15 @@
lastPrincipalFound =
verifyXMLSignature(
elem, crypto, returnCert, returnElements,
- protectedElements, signatureValue, cb
+ protectedElements, signatureValue, cb,
+ wsDocInfo
);
} catch (WSSecurityException ex) {
throw ex;
} finally {
- WSDocInfoStore.delete(wsDocInfo);
+ if (remove) {
+ WSDocInfoStore.delete(wsDocInfo);
+ }
}
if (lastPrincipalFound instanceof WSUsernameTokenPrincipal) {
returnResults.add(
@@ -178,7 +181,8 @@
Set returnElements,
List protectedElements,
byte[][] signatureValue,
- CallbackHandler cb
+ CallbackHandler cb,
+ WSDocInfo wsDocInfo
) throws WSSecurityException {
if (log.isDebugEnabled()) {
log.debug("Verify XML Signature");
@@ -227,13 +231,10 @@
);
}
SecurityTokenReference secRef = new
SecurityTokenReference((Element) node);
- int docHash = elem.getOwnerDocument().hashCode();
- //
// Here we get some information about the document that is being
// processed, in particular the crypto implementation, and already
// detected BST that may be used later during dereferencing.
//
- WSDocInfo wsDocInfo = WSDocInfoStore.lookup(docHash);
if (secRef.containsReference()) {
Element token =
secRef.getTokenElement(elem.getOwnerDocument(), wsDocInfo, cb);
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
Mon Mar 30 16:04:38 2009
@@ -233,7 +233,7 @@
* Gather some info about the document to process and store it for
* retrieval
*/
- wsDocInfo = new WSDocInfo(doc.hashCode());
+ wsDocInfo = new WSDocInfo(doc);
X509Certificate[] certs = null;
@@ -342,18 +342,18 @@
}
sig.addResourceResolver(EnvelopeIdResolver.getInstance());
- String sigUri = "Signature-" + sig.hashCode();
+ String sigUri = wssConfig.getIdAllocator().createId("Signature-", sig);
sig.setId(sigUri);
keyInfo = sig.getKeyInfo();
- keyInfoUri = "KeyId-" + keyInfo.hashCode();
+ keyInfoUri = wssConfig.getIdAllocator().createSecureId("KeyId-",
keyInfo);
keyInfo.setId(keyInfoUri);
secRef = new SecurityTokenReference(doc);
- strUri = "STRId-" + secRef.hashCode();
+ strUri = wssConfig.getIdAllocator().createSecureId("STRId-", secRef);
secRef.setID(strUri);
- certUri = "CertId-" + certs[0].hashCode();
+ certUri = wssConfig.getIdAllocator().createSecureId("CertId-",
certs[0]);
/*
* If the sender vouches, then we must sign the SAML token _and_ at
@@ -368,7 +368,7 @@
try {
if (senderVouches) {
secRefSaml = new SecurityTokenReference(doc);
- String strSamlUri = "STRSAMLId-" + secRefSaml.hashCode();
+ String strSamlUri =
wssConfig.getIdAllocator().createSecureId("STRSAMLId-", secRefSaml);
secRefSaml.setID(strSamlUri);
// Decouple Reference/KeyInfo setup - quick shot here
@@ -594,7 +594,7 @@
*/
public void computeSignature() throws WSSecurityException {
- WSDocInfoStore.store(wsDocInfo);
+ boolean remove = WSDocInfoStore.store(wsDocInfo);
try {
if (senderVouches) {
@@ -612,7 +612,9 @@
throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
null, null, e1);
} finally {
- WSDocInfoStore.delete(wsDocInfo);
+ if (remove) {
+ WSDocInfoStore.delete(wsDocInfo);
+ }
}
}
}
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
Mon Mar 30 16:04:38 2009
@@ -157,7 +157,7 @@
* Gather some info about the document to process and store it for
* retrieval
*/
- WSDocInfo wsDocInfo = new WSDocInfo(doc.hashCode());
+ WSDocInfo wsDocInfo = new WSDocInfo(doc);
Element envelope = doc.getDocumentElement();
SOAPConstants soapConstants =
WSSecurityUtil.getSOAPConstants(envelope);
@@ -243,14 +243,14 @@
}
KeyInfo info = sig.getKeyInfo();
- String keyInfoUri = "KeyId-" + info.hashCode();
+ String keyInfoUri =
wssConfig.getIdAllocator().createSecureId("KeyId-", info);
info.setId(keyInfoUri);
SecurityTokenReference secRef = new SecurityTokenReference(doc);
- String strUri = "STRId-" + secRef.hashCode();
+ String strUri = wssConfig.getIdAllocator().createSecureId("STRId-",
secRef);
secRef.setID(strUri);
- String certUri = "CertId-" + certs[0].hashCode();
+ String certUri = wssConfig.getIdAllocator().createSecureId("CertId-",
certs[0]);
if (tlog.isDebugEnabled()) {
t1 = System.currentTimeMillis();
@@ -278,7 +278,7 @@
try {
if (senderVouches) {
secRefSaml = new SecurityTokenReference(doc);
- String strSamlUri = "STRSAMLId-" + secRefSaml.hashCode();
+ String strSamlUri =
wssConfig.getIdAllocator().createSecureId("STRSAMLId-", secRefSaml);
secRefSaml.setID(strSamlUri);
// Decouple Refernce/KeyInfo setup - quick shot here
Reference ref = new Reference(doc);
@@ -418,7 +418,7 @@
wsDocInfo.setAssertion(samlToken);
WSSecurityUtil.prependChildElement(securityHeader, samlToken);
- WSDocInfoStore.store(wsDocInfo);
+ boolean remove = WSDocInfoStore.store(wsDocInfo);
try {
if (senderVouches) {
sig
@@ -435,7 +435,9 @@
throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
null, null, e1);
} finally {
- WSDocInfoStore.delete(wsDocInfo);
+ if (remove) {
+ WSDocInfoStore.delete(wsDocInfo);
+ }
}
if (tlog.isDebugEnabled()) {
t4 = System.currentTimeMillis();
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
Mon Mar 30 16:04:38 2009
@@ -30,6 +30,7 @@
import org.apache.xml.security.c14n.Canonicalizer;
import org.apache.xml.security.c14n.InvalidCanonicalizerException;
import org.apache.xml.security.signature.XMLSignatureInput;
+import org.apache.xml.security.transforms.Transform;
import org.apache.xml.security.transforms.TransformSpi;
import org.apache.ws.security.util.Base64;
import org.apache.xml.security.utils.XMLUtils;
@@ -63,7 +64,7 @@
private static String XMLNS = "xmlns=";
private WSDocInfo wsDocInfo = null;
-
+
public boolean wantsOctetStream() {
return false;
}
@@ -94,7 +95,8 @@
* @throws CanonicalizationException
* @throws InvalidCanonicalizerException
*/
- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput
input,
+ Transform
transformObject)
throws IOException, CanonicalizationException,
InvalidCanonicalizerException {
doDebug = log.isDebugEnabled();
@@ -106,17 +108,14 @@
//
// Get the main document, that is the complete SOAP request
document
//
- Document thisDoc = this._transformObject.getDocument();
- int docHash = thisDoc.hashCode();
- if (doDebug) {
- log.debug("doc: " + thisDoc.toString() + ", " + docHash);
- }
+ Document thisDoc = transformObject.getDocument();
+
//
// Here we get some information about the document that is being
// processed, in particular the crypto implementation, and already
// detected BST that may be used later during dereferencing.
//
- wsDocInfo = WSDocInfoStore.lookup(docHash);
+ wsDocInfo = WSDocInfoStore.lookup(thisDoc);
if (wsDocInfo == null) {
throw (new CanonicalizationException("no WSDocInfo found"));
}
@@ -131,11 +130,11 @@
// Canonicalizer
//
String canonAlgo = null;
- if (this._transformObject.length(
+ if (transformObject.length(
WSConstants.WSSE_NS, "TransformationParameters") == 1) {
Element tmpE =
XMLUtils.selectNode(
- this._transformObject.getElement().getFirstChild(),
+ transformObject.getElement().getFirstChild(),
WSConstants.WSSE_NS,
"TransformationParameters",
0
Modified:
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
---
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
(original)
+++
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
Mon Mar 30 16:04:38 2009
@@ -20,7 +20,6 @@
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
-import java.util.Date;
import java.util.Random;
import org.apache.commons.logging.Log;
@@ -49,10 +48,12 @@
if (baseUUID == null) {
baseUUID = getInitialUUID();
}
- if(++incrementingValue >= Long.MAX_VALUE){
+ long i = ++incrementingValue;
+ if(i >= Long.MAX_VALUE || i < 0){
incrementingValue = 0;
+ i = 0;
}
- return baseUUID + new Date().getTime() + incrementingValue;
+ return baseUUID + System.currentTimeMillis() + i;
}
protected static String getInitialUUID() {
Modified: webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java
(original)
+++ webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java Mon Mar
30 16:04:38 2009
@@ -62,6 +62,7 @@
suite.addTestSuite(TestWSSecurityNew12.class);
suite.addTestSuite(TestWSSecurityNew13.class);
suite.addTestSuite(TestWSSecurityNew14.class);
+ suite.addTestSuite(TestWSSecurityNew15.class);
suite.addTestSuite(TestWSSecurityNew16.class);
suite.addTestSuite(TestWSSecurityNew17.class);
suite.addTestSuite(TestWSSecurityNewSOAP12.class);
Modified:
webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java
(original)
+++ webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java
Mon Mar 30 16:04:38 2009
@@ -74,7 +74,7 @@
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
+ "<SOAP-ENV:Body>"
- + "<add
xmlns=\"http://ws.apache.org/counter/counter_port_type\">"
+ + "<add
xmlns=\"http://ws.apache.org/counter/counter_port_type/LogTestService2\">"
+ "<value xmlns=\"\">15</value>"
+ "</add>"
+ "</SOAP-ENV:Body>"
@@ -209,7 +209,7 @@
String outputString =
org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(doc);
if (LOG.isDebugEnabled()) {
- System.out.println("\n" + outputString + "\n");
+ LOG.debug(outputString);
}
assertTrue(outputString.indexOf("LogTestService2") > 0 ? true
: false);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]