Home » Java » Enterprise Java » Message Level Authorization in Apache ActiveMQ

About Bennet Schulz

Bennet Schulz
Bennet is a JavaEE and JavaFX addicted IT Consultant working at codecentric AG in Hamburg, Germany. In his free time he is involved in several Java User Group activities and conferences. He regularly blogs about his projects and different Java topics.

Message Level Authorization in Apache ActiveMQ

While the last post covered Broker Level Authentication, this blogpost is about more strict authorization on message level.

I didn’t have this fine granular authorization out there in real life projects, but I want to do it myself and give readers a tutorial to widen their knowledge about security in ActiveMQ and ease their beginning with it.

Sometimes it can be useful to restrict access to brokers and on top of it to certain messages. ActiveMQ doesn’t come with a plugin for it out of the box. You have to implement it more or less on your own.

Create a Java project with Maven

You have to start with creating a new Java project based on Maven.

In the next step, I recommend to add the activemq-all maven dependency (in the same version as your activemq installation to your project to be sure you use the correct imports and classes).

A list of all activemq versions and corresponding maven dependency snippets is available here.

After that it’s time to add a new Java class to your formerly created project. My Message Level Policy class looks like this:

package com.schulz.bennet.activemq;

import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.Message;
import org.apache.activemq.security.MessageAuthorizationPolicy;

public class MyMessageAuthorizationPolicy implements MessageAuthorizationPolicy {

    public boolean isAllowedToConsume(ConnectionContext ctx, Message m) {
        return ctx.getUserName().equals("admin");
    }
}

Note: Your class has to implement the MessageAuthorizationPolicy interface and you have to add the public boolean isAllowedToConsume(…) method to your class as well. Within this method you can implement your logic to decide who is allowed to consume your messages. In my example admins are allowed to consume, only.

Add the Policy to ActiveMQ

Open a console, cd into your project folder and build your maven application by calling mvn clean install command.

Now it’s time to copy the jar file from the target project folder to the lib folder of your ActiveMQ installation to make it available for ActiveMQ. In the last configuration step you have to add the following snippet into broker tag of the activemq.xml:

<messageAuthorizationPolicy>

<bean class="com.schulz.bennet.MyMessageMessageAuthorizationPolicy"

xmlns="http://www.springframework.org/schema/beans" />

</messageAuthorizationPolicy>

Hint: Don’t forget to change it to your fully qualified classname, not mine ;-)

Test the Policy by consuming messages

First you have to start the broker via the following command on your console:

./bin/activemq start

Check if your policy is working by using the activemq script to consume sample messages:

./bin/activemq consumer --user admin --password password

This should work, because the formerly created policy class allowes user admin to consume the messages. In addition to that it should not be possible to consume messages with other users than user admin. You can test it by using another user:

./bin/activemq consumer --user consumer --password password

This consumer should not consume any single message.

If you have questions, want my source code, a youtube video or something like that, just leave a comment or get in contact with me via twitter. Have fun with ActiveMQ!

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

 

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

 

and many more ....

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Want to take your Java skills to the next level?

Grab our programming books for FREE!

Here are some of the eBooks you will get:

  • Spring Interview QnA
  • Multithreading & Concurrency QnA
  • JPA Minibook
  • JVM Troubleshooting Guide
  • Advanced Java
  • Java Interview QnA
  • Java Design Patterns