Extract Security Conetext handling
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/62fd9906 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/62fd9906 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/62fd9906 Branch: refs/heads/master Commit: 62fd990682c0c6ff915356fb9b5f0a32efc20424 Parents: 4a714eb Author: Christian Schneider <ch...@die-schneider.net> Authored: Mon Apr 24 17:55:04 2017 +0200 Committer: Christian Schneider <ch...@die-schneider.net> Committed: Tue Apr 25 16:10:47 2017 +0200 ---------------------------------------------------------------------- .../apache/cxf/transport/jms/JMSConduit.java | 2 +- .../cxf/transport/jms/JMSDestination.java | 2 +- .../cxf/transport/jms/JMSMessageUtils.java | 44 ------------ .../transport/jms/SecurityContextFactory.java | 75 ++++++++++++++++++++ 4 files changed, 77 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/62fd9906/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java ---------------------------------------------------------------------- diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java index e588542..cbf2a6b 100644 --- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java +++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java @@ -436,7 +436,7 @@ public class JMSConduit extends AbstractConduit implements JMSExchangeSender, Me Message inMessage = JMSMessageUtils.asCXFMessage(jmsMessage, JMSConstants.JMS_CLIENT_RESPONSE_HEADERS); if (jmsConfig.isCreateSecurityContext()) { - SecurityContext securityContext = JMSMessageUtils.buildSecurityContext(jmsMessage, jmsConfig); + SecurityContext securityContext = SecurityContextFactory.buildSecurityContext(jmsMessage, jmsConfig); inMessage.put(SecurityContext.class, securityContext); } exchange.setInMessage(inMessage); http://git-wip-us.apache.org/repos/asf/cxf/blob/62fd9906/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java ---------------------------------------------------------------------- diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java index 22a94de..3362c35 100644 --- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java +++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java @@ -217,7 +217,7 @@ public class JMSDestination extends AbstractMultiplexDestination implements Mess + jmsConfig.getTargetDestination()); Message inMessage = JMSMessageUtils.asCXFMessage(message, JMSConstants.JMS_SERVER_REQUEST_HEADERS); if (jmsConfig.isCreateSecurityContext()) { - SecurityContext securityContext = JMSMessageUtils.buildSecurityContext(message, jmsConfig); + SecurityContext securityContext = SecurityContextFactory.buildSecurityContext(message, jmsConfig); inMessage.put(SecurityContext.class, securityContext); } inMessage.put(JMSConstants.JMS_SERVER_RESPONSE_HEADERS, new JMSMessageHeadersType()); http://git-wip-us.apache.org/repos/asf/cxf/blob/62fd9906/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java ---------------------------------------------------------------------- diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java index 31ba9f8..6ea346a 100644 --- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java +++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java @@ -25,7 +25,6 @@ import java.io.Reader; import java.io.StringReader; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; -import java.security.Principal; import java.util.Collections; import java.util.Enumeration; import java.util.List; @@ -49,7 +48,6 @@ import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.helpers.HttpHeaderHelper; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.message.MessageUtils; -import org.apache.cxf.security.SecurityContext; import org.apache.cxf.transport.jms.spec.JMSSpecConstants; import org.apache.cxf.transport.jms.uri.JMSEndpoint; import org.apache.cxf.transport.jms.util.JMSMessageConverter; @@ -222,48 +220,6 @@ final class JMSMessageUtils { } - /** - * Extract the property JMSXUserID or JMS_TIBCO_SENDER from the jms message and - * create a SecurityContext from it. - * For more info see Jira Issue CXF-2055 - * {@link https://issues.apache.org/jira/browse/CXF-2055} - * - * @param message jms message to retrieve user information from - * @return SecurityContext that contains the user of the producer of the message as the Principal - * @throws JMSException if something goes wrong - */ - public static SecurityContext buildSecurityContext(javax.jms.Message message, - JMSConfiguration config) throws JMSException { - String tempUserName = message.getStringProperty("JMSXUserID"); - if (tempUserName == null && config.isJmsProviderTibcoEms()) { - tempUserName = message.getStringProperty("JMS_TIBCO_SENDER"); - } - if (tempUserName == null) { - return null; - } - final String jmsUserName = tempUserName; - - final Principal principal = new Principal() { - public String getName() { - return jmsUserName; - } - - }; - - SecurityContext securityContext = new SecurityContext() { - - public Principal getUserPrincipal() { - return principal; - } - - public boolean isUserInRole(String role) { - return false; - } - - }; - return securityContext; - } - static String getEncoding(String ct) throws UnsupportedEncodingException { String contentType = ct.toLowerCase(); String enc = null; http://git-wip-us.apache.org/repos/asf/cxf/blob/62fd9906/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/SecurityContextFactory.java ---------------------------------------------------------------------- diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/SecurityContextFactory.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/SecurityContextFactory.java new file mode 100644 index 0000000..d51ff3d --- /dev/null +++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/SecurityContextFactory.java @@ -0,0 +1,75 @@ +/** + * 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.transport.jms; + +import java.security.Principal; + +import javax.jms.JMSException; +import javax.jms.Message; + +import org.apache.cxf.security.SecurityContext; + +public final class SecurityContextFactory { + + private SecurityContextFactory() { + } + + /** + * Extract the property JMSXUserID or JMS_TIBCO_SENDER from the jms message and + * create a SecurityContext from it. + * For more info see Jira Issue CXF-2055 + * {@link https://issues.apache.org/jira/browse/CXF-2055} + * + * @param message jms message to retrieve user information from + * @return SecurityContext that contains the user of the producer of the message as the Principal + * @throws JMSException if something goes wrong + */ + public static SecurityContext buildSecurityContext(Message message, + JMSConfiguration config) throws JMSException { + String tempUserName = message.getStringProperty("JMSXUserID"); + if (tempUserName == null && config.isJmsProviderTibcoEms()) { + tempUserName = message.getStringProperty("JMS_TIBCO_SENDER"); + } + if (tempUserName == null) { + return null; + } + final String jmsUserName = tempUserName; + + final Principal principal = new Principal() { + public String getName() { + return jmsUserName; + } + + }; + + SecurityContext securityContext = new SecurityContext() { + + public Principal getUserPrincipal() { + return principal; + } + + public boolean isUserInRole(String role) { + return false; + } + + }; + return securityContext; + } + +}