You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2016/02/15 12:09:19 UTC

cxf git commit: Adding pluggable TokenWrapper

Repository: cxf
Updated Branches:
  refs/heads/master 2e6ca288a -> 8f033131b


Adding pluggable TokenWrapper


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/8f033131
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/8f033131
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/8f033131

Branch: refs/heads/master
Commit: 8f033131bd7eff927546b25bc27d8c0cc28d2b82
Parents: 2e6ca28
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Mon Feb 15 11:01:34 2016 +0000
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Mon Feb 15 11:01:34 2016 +0000

----------------------------------------------------------------------
 .../cxf/sts/operation/AbstractOperation.java    |  9 ++++
 .../cxf/sts/operation/DefaultTokenWrapper.java  | 49 ++++++++++++++++++++
 .../cxf/sts/operation/TokenIssueOperation.java  | 13 +-----
 .../sts/operation/TokenValidateOperation.java   | 13 +-----
 .../apache/cxf/sts/operation/TokenWrapper.java  | 35 ++++++++++++++
 5 files changed, 95 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/8f033131/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
index 6133816..82f739c 100644
--- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
@@ -102,7 +102,16 @@ public abstract class AbstractOperation {
     protected ClaimsManager claimsManager = new ClaimsManager();
     protected STSEventListener eventPublisher;
     protected List<TokenDelegationHandler> delegationHandlers = new ArrayList<>();
+    protected TokenWrapper tokenWrapper = new DefaultTokenWrapper();
     
+    public TokenWrapper getTokenWrapper() {
+        return tokenWrapper;
+    }
+
+    public void setTokenWrapper(TokenWrapper tokenWrapper) {
+        this.tokenWrapper = tokenWrapper;
+    }
+
     public boolean isReturnReferences() {
         return returnReferences;
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/8f033131/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/DefaultTokenWrapper.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/DefaultTokenWrapper.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/DefaultTokenWrapper.java
new file mode 100644
index 0000000..fe88ba3
--- /dev/null
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/DefaultTokenWrapper.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.sts.operation;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.ws.security.sts.provider.model.RequestedSecurityTokenType;
+
+/**
+ * The default implementation of TokenWrapper. For DOM Elements it just set the token directly on the
+ * RSTT. If it's a String (as per the case of JWT Tokens), it puts a "TokenWrapper" wrapper around the
+ * token.
+ */
+public class DefaultTokenWrapper implements TokenWrapper {
+    
+    /**
+     * Wrap the Token parameter and set it on the RequestedSecurityTokenType parameter
+     */
+    public void wrapToken(Object token, RequestedSecurityTokenType requestedTokenType) {
+        if (token instanceof String) {
+            Document doc = DOMUtils.newDocument();
+            Element tokenWrapper = doc.createElementNS(null, "TokenWrapper");
+            tokenWrapper.setTextContent((String)token);
+            requestedTokenType.setAny(tokenWrapper);
+        } else {
+            requestedTokenType.setAny(token);
+        }
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/8f033131/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenIssueOperation.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenIssueOperation.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenIssueOperation.java
index d6fb5e8..455a9ae 100644
--- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenIssueOperation.java
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenIssueOperation.java
@@ -29,12 +29,8 @@ import java.util.logging.Logger;
 
 import javax.xml.bind.JAXBElement;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.helpers.CastUtils;
-import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.sts.QNameConstants;
 import org.apache.cxf.sts.event.STSIssueFailureEvent;
 import org.apache.cxf.sts.event.STSIssueSuccessEvent;
@@ -281,14 +277,7 @@ public class TokenIssueOperation extends AbstractOperation implements IssueOpera
             QNameConstants.WS_TRUST_FACTORY.createRequestedSecurityTokenType();
         JAXBElement<RequestedSecurityTokenType> requestedToken = 
             QNameConstants.WS_TRUST_FACTORY.createRequestedSecurityToken(requestedTokenType);
-        if (tokenResponse.getToken() instanceof String) {
-            Document doc = DOMUtils.newDocument();
-            Element tokenWrapper = doc.createElementNS(null, "TokenWrapper");
-            tokenWrapper.setTextContent((String)tokenResponse.getToken());
-            requestedTokenType.setAny(tokenWrapper);
-        } else {
-            requestedTokenType.setAny(tokenResponse.getToken());
-        }
+        tokenWrapper.wrapToken(tokenResponse.getToken(), requestedTokenType);
         response.getAny().add(requestedToken);
 
         if (returnReferences) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/8f033131/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenValidateOperation.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenValidateOperation.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenValidateOperation.java
index c029809..e74cd65 100644
--- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenValidateOperation.java
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenValidateOperation.java
@@ -26,11 +26,7 @@ import java.util.logging.Logger;
 
 import javax.xml.bind.JAXBElement;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
 import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.sts.QNameConstants;
 import org.apache.cxf.sts.RealmParser;
 import org.apache.cxf.sts.STSConstants;
@@ -229,14 +225,7 @@ public class TokenValidateOperation extends AbstractOperation implements Validat
                 QNameConstants.WS_TRUST_FACTORY.createRequestedSecurityTokenType();
             JAXBElement<RequestedSecurityTokenType> requestedToken = 
                 QNameConstants.WS_TRUST_FACTORY.createRequestedSecurityToken(requestedTokenType);
-            if (tokenProviderResponse.getToken() instanceof String) {
-                Document doc = DOMUtils.newDocument();
-                Element tokenWrapper = doc.createElementNS(null, "TokenWrapper");
-                tokenWrapper.setTextContent((String)tokenProviderResponse.getToken());
-                requestedTokenType.setAny(tokenWrapper);
-            } else {
-                requestedTokenType.setAny(tokenProviderResponse.getToken());
-            }
+            tokenWrapper.wrapToken(tokenProviderResponse.getToken(), requestedTokenType);
             response.getAny().add(requestedToken);
             
             // Lifetime

http://git-wip-us.apache.org/repos/asf/cxf/blob/8f033131/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenWrapper.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenWrapper.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenWrapper.java
new file mode 100644
index 0000000..3b0f60e
--- /dev/null
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/TokenWrapper.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.sts.operation;
+
+import org.apache.cxf.ws.security.sts.provider.model.RequestedSecurityTokenType;
+
+/**
+ * This interface defines a pluggable way of "wrapping" tokens that are issued by the STS. Some Tokens may be issued 
+ * in a format that needs to be wrapped as part of the JAXB response.
+ */
+public interface TokenWrapper {
+    
+    /**
+     * Wrap the Token parameter and set it on the RequestedSecurityTokenType parameter
+     */
+    void wrapToken(Object token, RequestedSecurityTokenType requestedTokenType);
+    
+}