Hello,

MyBroker.java

package jwt.validation;

import java.util.HashMap;
import java.util.Map;

import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQMessageConsumer;
import org.apache.activemq.broker.BrokerFilter;
import org.apache.activemq.broker.Connection;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.broker.ProducerBrokerExchange;
import org.apache.activemq.broker.region.Subscription;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.ActiveMQMessage;
import org.apache.activemq.command.ConnectionInfo;
import org.apache.activemq.command.ConsumerInfo;
import org.apache.activemq.command.Message;
import org.apache.activemq.command.SessionInfo;
import org.apache.log4j.Logger;


public class MyBroker extends BrokerFilter {

                final static Logger logger = Logger.getLogger(MyBroker.class);
                private Map<String, String> userMap = new HashMap<String, 
String>();

                public MyBroker(org.apache.activemq.broker.Broker next) {
                                super(next);

                }



                public void send(ProducerBrokerExchange producerExchange, 
ActiveMQMessage messageSend) throws JMSException
                {
                                  byte[] messageBytes = 
messageSend.getContent().data;

                                  Message data = messageSend.getMessage();
                                  logger.warn("MESSAGEEEEEEEEEEEEEEEEEEEEE" + 
data);
                                  String message = new String(messageBytes);
                                  logger.warn("messageBody" + message);
                                  logger.info("messageBody" + message);
                                  logger.fatal("messageBody" + message);
                                  logger.debug("messageBody" + message);


                 }

                public void addConnection(ConnectionContext context, 
ConnectionInfo info)
            throws Exception {

                                info.getUserName();
                                info.toString();


                                logger.warn("info1" + info.getUserName());
                                logger.fatal("info2" + info.toString());

       String token = context.getUserName();
       logger.debug("token1" + token);
       logger.warn("token2" + token);
       logger.fatal("token3" + token);


        // Then call your parent
        super.addConnection(context, info);
    }

    public Subscription addConsumer(ConnectionContext context, ConsumerInfo 
info) throws Exception {



        ActiveMQDestination dest = info.getDestination();
        Connection conn = context.getConnection();
        if (dest != null) {
            String destName = info.getDestination().getPhysicalName();
            String clientId = context.getClientId();
            String allowedDest = userMap.get(clientId);

            logger.info(">>> Got Consumer Add request { Destination: " + 
destName
                    + ", Remote Address: " + conn.getRemoteAddress()
                    + ", ClientID: " + clientId
                    + " }");
            if (allowedDest != null && (allowedDest.equals("*") || 
allowedDest.equals(destName) || destName.startsWith("ActiveMQ"))) {
                logger.info(">>> Subscription allowed");
            } else {
                logger.error(">>> Destination not allowed. Subscription 
denied!");
                throw new Exception(">>> Subscription denied!");
            }
        } else {
            logger.error("<<< Got Consumer Add request from Remote Address:" + 
conn.getRemoteAddress() + ". But destination is NULL.");
        }
        return super.addConsumer(context, info);
    }
}

Sample.java

package jwt.validation;

import org.apache.activemq.ActiveMQMessageProducer;
import org.apache.activemq.broker.Broker;
import org.apache.activemq.broker.BrokerPlugin;
import org.apache.log4j.Logger;

public class Sample  implements BrokerPlugin {

                final static Logger logger = Logger.getLogger(Sample.class);

                public static void main(String[] args) {


                }

                private void runMe(String parameter){

                                if(logger.isDebugEnabled()){
                                                logger.debug("This is debug : " 
+ parameter);
                                }

                                if(logger.isInfoEnabled()){
                                                logger.info("This is info : " + 
parameter);
                                }

                                logger.warn("This is warn : " + parameter);
                                logger.error("This is error : " + parameter);
                                logger.fatal("This is fatal : " + parameter);

                }

                public Broker installPlugin(Broker broker) throws Exception {
                                Sample sample = new Sample();
                                sample.runMe("ActiveMQ Hello");

                                return new MyBroker(broker);
                }


}

The above are two classes I have implemented for my custom plugin.

Regards,
Bharat Gupta
Development & Support | Platform Technician, IXCB | Scania IT
Mobile: +46700869007, +91-9718483802
bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>

From: tbai...@gmail.com [mailto:tbai...@gmail.com] On Behalf Of Tim Bain
Sent: Sunday, November 26, 2017 4:31 AM
To: ActiveMQ Users <users@activemq.apache.org>
Cc: users-ow...@activemq.apache.org
Subject: RE: ActiveMQ custom plugin



On Nov 24, 2017 5:44 PM, "Gupta Bharat" 
<bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>> wrote:

hello Tim,



My Custom Plugin is getting installed as I am using log4j to print random stuff 
and its getting printed in logs.
Can you please describe in more detail exactly what methods that logging is 
done in and how it proves that the plugin was actually installed? If (for 
example) your logging is only in your constructor or your initialization 
method, that just proves that Spring made your bean, not that it was installed 
in the broker as a plugin.

I am hereby attaching my codes that you can see.
Where? All I see is your activemq.xml snippet below, but no actual code for 
your plugin.

activemq.xml configurations:

<plugins>

                               <bean id="sample"

                                class="jwt.validation.Sample"

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

                               </plugins>



Also I would like to explain you my exact requirement.



The diagram below shows what I am trying to do it now.





[cid:image001.png@01D3658E.4A6B3E20]
That sounds like it should be doable via an interceptor based on what I know 
about them (i.e. the wiki, but no hands-on experience).

QUESTIONS:



1.       how can we provide JWT to custom plugin from client?
If you have to use MQTT, you'll need to encode it directly into the message 
body, because that's all MQTT supports. You could for example make a JSON 
payload with two fields: the JWT and the message body. Or you could switch to 
OpenWire and put the JWT into a custom header on the message the client is 
sending.

2.       do we need to store jwt in topic first and then consume it from topic 
to validate it? (not idle case)
You need to put the JWT into the message itself so that your plugin can 
evaluate the token and then decide what to do with the message based on that 
evaluation.

3.       can we call restful service from activeMQ broker that can validate 
token and gives the result back to broker?
Yes, as far as I know, you'd be able to do that from within the broker. (I've 
never done that, but I'm not aware of anything that would prevent you from 
doing it.)

Tim please let me know if I am clear with my requirements. Else we can talk 
more on call/phone.



Thanks in advance





Regards,

Bharat Gupta

Development & Support | Platform Technician, IXCB | Scania IT

Mobile: +46700869007<tel:+46%2070%20086%2090%2007>, 
+91-9718483802<tel:+91%2097184%2083802>

bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>




-----Original Message-----
From: tbai...@gmail.com<mailto:tbai...@gmail.com> 
[mailto:tbai...@gmail.com<mailto:tbai...@gmail.com>] On Behalf Of Tim Bain
Sent: Friday, November 24, 2017 7:19 PM
To: ActiveMQ Users <users@activemq.apache.org<mailto:users@activemq.apache.org>>
Cc: users-ow...@activemq.apache.org<mailto:users-ow...@activemq.apache.org>
Subject: RE: ActiveMQ custom plugin



1. Your send() method needs to call super.send() after doing your custom

work, otherwise the message will never be sent to the real Broker object.

Please review the wiki page I referred to earlier, which covers how to

implement an interceptor.



2. To me it sounds like your plugin isn't getting installed. Do you have

any indication that it is, from logs or some other mechanism? And can you

please share the code of the class that implements BrokerPlugin, to confirm

that your installPlugin() method looks right, and the XML block where you

create the plugin bean?



Tim



On Nov 24, 2017 8:39 AM, "Gupta Bharat" 
<bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>> wrote:



> Hello,

>

> I tried implementing the method as below:

>

>         public void send(ProducerBrokerExchange producerExchange,

> ActiveMQMessage messageSend) throws JMSException

>          {

>                   byte[] messageBytes = messageSend.getContent().data;

>                   String message = new String(messageBytes);

>                   logger.info<http://logger.info>("messageBody" + message);

>         }

>

> Also I am publishing a message on a topic even though this send() method

> is not been called as logger.info<http://logger.info> is not getting printed 
> in my Custom

> Plugin.

>

> Could you please help me on this?

>

> Regards,

> Bharat Gupta

> Development & Support | Platform Technician, IXCB | Scania IT

> Mobile: +46700869007<tel:+46%2070%20086%2090%2007>, 
> +91-9718483802<tel:+91%2097184%2083802>

> bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>

>

>

> -----Original Message-----

> From: tbai...@gmail.com<mailto:tbai...@gmail.com> [mailto:tbai...@gmail.com] 
> On Behalf Of Tim Bain

> Sent: Friday, November 24, 2017 7:15 PM

> To: ActiveMQ Users 
> <users@activemq.apache.org<mailto:users@activemq.apache.org>>

> Cc: users-ow...@activemq.apache.org<mailto:users-ow...@activemq.apache.org>

> Subject: Re: ActiveMQ custom plugin

>

> As I said in your other thread, you would do that by implementing code in

> the send() method of your subclass of BrokerFilter, which you would create

> and return in your installPlugin() method.

>

> Tim

>

> On Nov 24, 2017 3:51 AM, "Gupta Bharat" 
> <bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>> wrote:

>

> Hello,

>

> I have a scenario as follows:

>

>

> 1.       I have Custom Plugins that decrypts the data and validates it.

>

> 2.       I am getting Encrypted data (token) from user that need to be

> decrypted on custom plugin.

>

> 3.       Client is accessing the broker using mqtt protocol

>

> Need Solution for the following:

>

> 1.       Before getting data onto topic on ACtiveMQ broker I need to

> validate the  data(token) in my custom plugin

>

> 2.       How to extract a data what customer is sending? So that I can

> extract the data, decrypt the message and validate.

>

>

> Implementation so far:

>

> 1.       Custom Plugin is ready and JAR has been added in <ActiveMQ>/libs

>

> 2.       Added the plugin configuration in activemq.xml

>

>

> Could anyone help me with a solution for the same as it's critical case.

>

> Thank you In Advance

>

> Regards,

> Bharat Gupta

> Development & Support | Platform Technician, IXCB | Scania IT

> Mobile: +46700869007<tel:+46%2070%20086%2090%2007>, 
> +91-9718483802<tel:+91%2097184%2083802>

> bharat.gu...@scania.com<mailto:bharat.gu...@scania.com<mailto:bharat.gu...@scania.com%3cmailto:bharat.gu...@scania.com>>

>

Reply via email to