You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2014/02/03 17:19:02 UTC

git commit: Implements APLO-213: Support an option to set the JMSXUserID openwire header based on the authenticated user.

Updated Branches:
  refs/heads/trunk 2937141bb -> 989384b37


Implements APLO-213: Support an option to set the JMSXUserID openwire header based on the authenticated user.

Project: http://git-wip-us.apache.org/repos/asf/activemq-apollo/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-apollo/commit/989384b3
Tree: http://git-wip-us.apache.org/repos/asf/activemq-apollo/tree/989384b3
Diff: http://git-wip-us.apache.org/repos/asf/activemq-apollo/diff/989384b3

Branch: refs/heads/trunk
Commit: 989384b37a232f22256279208c7c841a6b3e4308
Parents: 2937141
Author: Hiram Chirino <hi...@hiramchirino.com>
Authored: Mon Feb 3 11:18:55 2014 -0500
Committer: Hiram Chirino <hi...@hiramchirino.com>
Committed: Mon Feb 3 11:18:55 2014 -0500

----------------------------------------------------------------------
 .../openwire/OpenwireProtocolHandler.scala      | 12 ++++++++++
 .../apollo/openwire/command/Message.java        |  1 +
 .../apollo/openwire/dto/OpenwireDTO.java        | 17 +++++++++----
 .../test/resources/apollo-openwire-leveldb.xml  |  2 +-
 .../apollo/openwire/test/SecurityTest.scala     | 25 ++++++++++++++++++++
 .../src/documentation/openwire-manual.md        |  1 +
 6 files changed, 52 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/989384b3/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala
----------------------------------------------------------------------
diff --git a/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala b/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala
index 97aa182..fa2bc13 100644
--- a/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala
+++ b/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala
@@ -714,6 +714,18 @@ class OpenwireProtocolHandler extends ProtocolHandler {
   def send_via_route(route:OpenwireDeliveryProducerRoute, message:ActiveMQMessage, uow:StoreUOW) = {
     // We may need to add some headers..
     val delivery = new Delivery
+
+    if( host.authenticator!=null ) {
+      if( OptionSupport(config.add_jmsxuserid).getOrElse(true) ) {
+        for( name <- host.authenticator.user_name(security_context) ) {
+          var userid = utf8(name)
+          if( userid != message.getUserID ) {
+            message.setUserID(userid)
+          }
+        }
+      }
+    }
+
     delivery.message = new OpenwireMessage(message)
     delivery.expiration = message.getExpiration
     delivery.persistent = message.isPersistent

http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/989384b3/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/command/Message.java
----------------------------------------------------------------------
diff --git a/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/command/Message.java b/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/command/Message.java
index 02cddcb..dc60578 100644
--- a/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/command/Message.java
+++ b/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/command/Message.java
@@ -560,6 +560,7 @@ public abstract class Message extends BaseCommand implements MarshallAware {
     }
 
     public void setUserID(UTF8Buffer jmsxUserID) {
+        cachedEncoding = null;
         this.userID = jmsxUserID;
     }
 

http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/989384b3/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/dto/OpenwireDTO.java
----------------------------------------------------------------------
diff --git a/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/dto/OpenwireDTO.java b/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/dto/OpenwireDTO.java
index a356079..feb9319 100644
--- a/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/dto/OpenwireDTO.java
+++ b/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/dto/OpenwireDTO.java
@@ -48,6 +48,8 @@ public class OpenwireDTO extends ProtocolDTO {
     public Long max_frame_size;
     @XmlAttribute(name="buffer_size")
     public String buffer_size;
+    @XmlAttribute(name="add_jmsxuserid")
+    public Boolean add_jmsxuserid;
 
 
     @Override
@@ -58,24 +60,28 @@ public class OpenwireDTO extends ProtocolDTO {
 
         OpenwireDTO that = (OpenwireDTO) o;
 
+        if (buffer_size != null ? !buffer_size.equals(that.buffer_size) : that.buffer_size != null)
+            return false;
         if (cache != null ? !cache.equals(that.cache) : that.cache != null)
             return false;
-        if (cache_size != null ? !cache_size.equals(that.cache_size) : that.cache_size != null) return false;
+        if (cache_size != null ? !cache_size.equals(that.cache_size) : that.cache_size != null)
+            return false;
+        if (add_jmsxuserid != null ? !add_jmsxuserid.equals(that.add_jmsxuserid) : that.add_jmsxuserid != null)
+            return false;
         if (max_frame_size != null ? !max_frame_size.equals(that.max_frame_size) : that.max_frame_size != null)
             return false;
         if (max_inactivity_duration != null ? !max_inactivity_duration.equals(that.max_inactivity_duration) : that.max_inactivity_duration != null)
             return false;
         if (max_inactivity_duration_initial_delay != null ? !max_inactivity_duration_initial_delay.equals(that.max_inactivity_duration_initial_delay) : that.max_inactivity_duration_initial_delay != null)
             return false;
-        if (tcp_no_delay != null ? !tcp_no_delay.equals(that.tcp_no_delay) : that.tcp_no_delay != null)
-            return false;
         if (stack_trace != null ? !stack_trace.equals(that.stack_trace) : that.stack_trace != null)
             return false;
+        if (tcp_no_delay != null ? !tcp_no_delay.equals(that.tcp_no_delay) : that.tcp_no_delay != null)
+            return false;
         if (tight_encoding != null ? !tight_encoding.equals(that.tight_encoding) : that.tight_encoding != null)
             return false;
-        if (buffer_size != null ? !buffer_size.equals(that.buffer_size) : that.buffer_size != null)
+        if (version != null ? !version.equals(that.version) : that.version != null)
             return false;
-        if (version != null ? !version.equals(that.version) : that.version != null) return false;
 
         return true;
     }
@@ -93,6 +99,7 @@ public class OpenwireDTO extends ProtocolDTO {
         result = 31 * result + (max_inactivity_duration_initial_delay != null ? max_inactivity_duration_initial_delay.hashCode() : 0);
         result = 31 * result + (max_frame_size != null ? max_frame_size.hashCode() : 0);
         result = 31 * result + (buffer_size != null ? buffer_size.hashCode() : 0);
+        result = 31 * result + (add_jmsxuserid != null ? add_jmsxuserid.hashCode() : 0);
         return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/989384b3/apollo-openwire/src/test/resources/apollo-openwire-leveldb.xml
----------------------------------------------------------------------
diff --git a/apollo-openwire/src/test/resources/apollo-openwire-leveldb.xml b/apollo-openwire/src/test/resources/apollo-openwire-leveldb.xml
index 7e3e84e..79efef9 100644
--- a/apollo-openwire/src/test/resources/apollo-openwire-leveldb.xml
+++ b/apollo-openwire/src/test/resources/apollo-openwire-leveldb.xml
@@ -16,7 +16,7 @@
     limitations under the License.
 -->
 <broker xmlns="http://activemq.apache.org/schema/activemq/apollo">
-  <notes>Has a BDB store enabled.</notes>
+  <notes>Has a LevelDB store enabled.</notes>
 
   <virtual_host id="default">
     <host_name>localhost</host_name>

http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/989384b3/apollo-openwire/src/test/scala/org/apache/activemq/apollo/openwire/test/SecurityTest.scala
----------------------------------------------------------------------
diff --git a/apollo-openwire/src/test/scala/org/apache/activemq/apollo/openwire/test/SecurityTest.scala b/apollo-openwire/src/test/scala/org/apache/activemq/apollo/openwire/test/SecurityTest.scala
index b26d7f2..1b4f5d7 100644
--- a/apollo-openwire/src/test/scala/org/apache/activemq/apollo/openwire/test/SecurityTest.scala
+++ b/apollo-openwire/src/test/scala/org/apache/activemq/apollo/openwire/test/SecurityTest.scala
@@ -156,4 +156,29 @@ class SecurityTest extends OpenwireTestSupport with BrokerParallelTestExecution
       consumer.receive();
     }
   }
+
+  test("APLO-213: The JMSXUserID is set to be the authenticated user") {
+
+    val dest = queue(next_id("JMSXUserID"));
+
+    val producer_connection = connect(user="can_send_create_queue", password="can_send_create_queue")
+
+    val producer_session = producer_connection.createSession(false, Session.AUTO_ACKNOWLEDGE)
+    val producer = producer_session.createProducer(dest)
+    try {
+      producer.send(producer_session.createTextMessage("Test Message"))
+    } catch {
+      case e:Throwable => fail("Should not have thrown an exception")
+    }
+
+    val consumer_connection = connect(user="can_consume_queue", password="can_consume_queue")
+    val consumer_session = consumer_connection.createSession(false, Session.AUTO_ACKNOWLEDGE)
+    val consumer = consumer_session.createConsumer(dest)
+
+    val msg = consumer.receive(receive_timeout)
+    msg.getStringProperty("JMSXUserID") should equal("can_send_create_queue")
+
+  }
+
+
 }

http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/989384b3/apollo-website/src/documentation/openwire-manual.md
----------------------------------------------------------------------
diff --git a/apollo-website/src/documentation/openwire-manual.md b/apollo-website/src/documentation/openwire-manual.md
index 5bfabd8..4c88374 100644
--- a/apollo-website/src/documentation/openwire-manual.md
+++ b/apollo-website/src/documentation/openwire-manual.md
@@ -46,6 +46,7 @@ be closed. Default is `30000`
 * `max_inactivity_duration_initial_delay` : Amount of time to delay between determining the socket should be closed
 and actually closing it. Default is `30000`
 * `max_frame_size` : Size in bytes of the largest frame that can be sent to the broker. Default is `100MB`
+* `add_jmsxuserid` : If set to `false`, disables setting the JMSXUserID header on received messages.  Default is `true`.
 
 An example of configuring the OpenWire protocol