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 2011/10/14 13:22:16 UTC
svn commit: r1183307 -
/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java
Author: coheigea
Date: Fri Oct 14 11:22:15 2011
New Revision: 1183307
URL: http://svn.apache.org/viewvc?rev=1183307&view=rev
Log:
Retrieve cached reference elements rather than searching for them after signature processing
Modified:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java
Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java?rev=1183307&r1=1183306&r2=1183307&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java Fri Oct 14 11:22:15 2011
@@ -464,47 +464,22 @@ public class SignatureProcessor implemen
String uri = siRef.getURI();
if (!"".equals(uri)) {
- Element se = null;
-
- List<?> transformsList = siRef.getTransforms();
-
- for (int j = 0; j < transformsList.size(); j++) {
-
- Transform transform = (Transform)transformsList.get(j);
-
- if (STRTransform.TRANSFORM_URI.equals(transform.getAlgorithm())) {
- NodeSetData data = (NodeSetData)siRef.getDereferencedData();
- if (data != null) {
- java.util.Iterator<?> iter = data.iterator();
-
- Node securityTokenReference = null;
- while (iter.hasNext()) {
- Node node = (Node)iter.next();
- if ("SecurityTokenReference".equals(node.getLocalName())) {
- securityTokenReference = node;
- break;
- }
- }
-
- if (securityTokenReference != null) {
- SecurityTokenReference secTokenRef =
- new SecurityTokenReference(
- (Element)securityTokenReference,
- wssConfig.isWsiBSPCompliant()
- );
- se = STRTransformUtil.dereferenceSTR(doc, secTokenRef, wsDocInfo);
+ Element se = dereferenceSTR(doc, siRef, wssConfig, wsDocInfo);
+ // If an STR Transform is not used then just find the cached element
+ if (se == null) {
+ NodeSetData data = (NodeSetData)siRef.getDereferencedData();
+ if (data != null) {
+ java.util.Iterator<?> iter = data.iterator();
+
+ while (iter.hasNext()) {
+ Node n = (Node)iter.next();
+ if (n instanceof Element) {
+ se = (Element)n;
+ break;
}
}
}
}
-
- if (se == null) {
- CallbackLookup callbackLookup = wsDocInfo.getCallbackLookup();
- if (callbackLookup == null) {
- callbackLookup = new DOMCallbackLookup(doc);
- }
- se = callbackLookup.getElement(uri, null, false);
- }
if (se == null) {
throw new WSSecurityException(WSSecurityException.FAILED_CHECK);
}
@@ -531,6 +506,52 @@ public class SignatureProcessor implemen
return protectedRefs;
}
+ /**
+ * Check to see if a SecurityTokenReference transform was used, if so then return the
+ * dereferenced element.
+ */
+ private Element dereferenceSTR(
+ Document doc,
+ Reference siRef,
+ WSSConfig wssConfig,
+ WSDocInfo wsDocInfo
+ ) throws WSSecurityException {
+ List<?> transformsList = siRef.getTransforms();
+
+ for (int j = 0; j < transformsList.size(); j++) {
+
+ Transform transform = (Transform)transformsList.get(j);
+
+ if (STRTransform.TRANSFORM_URI.equals(transform.getAlgorithm())) {
+ NodeSetData data = (NodeSetData)siRef.getDereferencedData();
+ if (data != null) {
+ java.util.Iterator<?> iter = data.iterator();
+
+ Node securityTokenReference = null;
+ while (iter.hasNext()) {
+ Node node = (Node)iter.next();
+ if ("SecurityTokenReference".equals(node.getLocalName())) {
+ securityTokenReference = node;
+ break;
+ }
+ }
+
+ if (securityTokenReference != null) {
+ SecurityTokenReference secTokenRef =
+ new SecurityTokenReference(
+ (Element)securityTokenReference,
+ wssConfig.isWsiBSPCompliant()
+ );
+ Element se = STRTransformUtil.dereferenceSTR(doc, secTokenRef, wsDocInfo);
+ if (se != null) {
+ return se;
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
}