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 2013/01/04 12:39:20 UTC
svn commit: r1428801 - in
/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom:
message/token/SecurityContextToken.java util/WSSecurityUtil.java
Author: coheigea
Date: Fri Jan 4 11:39:19 2013
New Revision: 1428801
URL: http://svn.apache.org/viewvc?rev=1428801&view=rev
Log:
Some minor optimisations
Modified:
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/message/token/SecurityContextToken.java
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/util/WSSecurityUtil.java
Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/message/token/SecurityContextToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/message/token/SecurityContextToken.java?rev=1428801&r1=1428800&r2=1428801&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/message/token/SecurityContextToken.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/message/token/SecurityContextToken.java Fri Jan 4 11:39:19 2013
@@ -50,7 +50,7 @@ public class SecurityContextToken {
*/
private Element elementIdentifier = null;
- private WSSConfig wssConfig = WSSConfig.getNewInstance();
+ private WSSConfig wssConfig = null;
private String tokenType = WSConstants.WSC_SCT;
@@ -95,7 +95,7 @@ public class SecurityContextToken {
elementIdentifier.appendChild(doc.createTextNode(uuid));
- setID(wssConfig.getIdAllocator().createSecureId("sctId-", element));
+ setID(getWSSConfig().getIdAllocator().createSecureId("sctId-", element));
}
/**
@@ -274,4 +274,10 @@ 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/ws/security/dom/util/WSSecurityUtil.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/util/WSSecurityUtil.java?rev=1428801&r1=1428800&r2=1428801&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/util/WSSecurityUtil.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/util/WSSecurityUtil.java Fri Jan 4 11:39:19 2013
@@ -707,20 +707,63 @@ public final class WSSecurityUtil {
String actor,
boolean doCreate
) throws WSSecurityException {
- Element wsseSecurity = getSecurityHeader(doc, actor);
- if (wsseSecurity != null) {
- return wsseSecurity;
- } else if (doCreate) {
- String soapNamespace = WSSecurityUtil.getSOAPNamespace(envelope);
- Element header =
- getDirectChildElement(envelope, WSConstants.ELEM_HEADER, soapNamespace);
- if (header == null) {
+ String soapNamespace = WSSecurityUtil.getSOAPNamespace(doc.getDocumentElement());
+ Element header =
+ getDirectChildElement(
+ doc.getDocumentElement(),
+ WSConstants.ELEM_HEADER,
+ soapNamespace
+ );
+ if (header == null) { // no SOAP header at all
+ if (doCreate) {
header = createElementInSameNamespace(envelope, WSConstants.ELEM_HEADER);
header = prependChildElement(envelope, header);
+ } else {
+ return null;
+ }
+ }
+
+ String actorLocal = WSConstants.ATTR_ACTOR;
+ if (WSConstants.URI_SOAP12_ENV.equals(soapNamespace)) {
+ actorLocal = WSConstants.ATTR_ROLE;
+ }
+
+ //
+ // Iterate through the security headers
+ //
+ Element foundSecurityHeader = null;
+ for (
+ Node currentChild = header.getFirstChild();
+ currentChild != null;
+ currentChild = currentChild.getNextSibling()
+ ) {
+ if (Node.ELEMENT_NODE == currentChild.getNodeType()
+ && WSConstants.WSSE_LN.equals(currentChild.getLocalName())
+ && WSConstants.WSSE_NS.equals(currentChild.getNamespaceURI())) {
+
+ Element elem = (Element)currentChild;
+ Attr attr = elem.getAttributeNodeNS(soapNamespace, actorLocal);
+ String hActor = (attr != null) ? attr.getValue() : null;
+
+ if (WSSecurityUtil.isActorEqual(actor, hActor)) {
+ if (foundSecurityHeader != null) {
+ if (log.isDebugEnabled()) {
+ log.debug(
+ "Two or more security headers have the same actor name: " + actor
+ );
+ }
+ throw new WSSecurityException(WSSecurityException.INVALID_SECURITY);
+ }
+ foundSecurityHeader = elem;
+ }
}
- wsseSecurity = doc.createElementNS(WSConstants.WSSE_NS, "wsse:Security");
- wsseSecurity.setAttributeNS(WSConstants.XMLNS_NS, "xmlns:wsse", WSConstants.WSSE_NS);
- return prependChildElement(header, wsseSecurity);
+ }
+ if (foundSecurityHeader != null) {
+ return foundSecurityHeader;
+ } else if (doCreate) {
+ foundSecurityHeader = doc.createElementNS(WSConstants.WSSE_NS, "wsse:Security");
+ foundSecurityHeader.setAttributeNS(WSConstants.XMLNS_NS, "xmlns:wsse", WSConstants.WSSE_NS);
+ return prependChildElement(header, foundSecurityHeader);
}
return null;
}