activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Bain <tb...@alumni.duke.edu>
Subject RE: ActiveMQ custom plugin
Date Thu, 01 Feb 2018 13:59:15 GMT
Bharat,

Is this in 5.x, or did you switch to Artemis?

Your code is operating on a message, but what called your code? We'd need
some context on how you got that message to know what you should do with it
next.

Tim

On Feb 1, 2018 5:01 AM, "Gupta Bharat" <bharat.gupta@scania.com> wrote:

> Hello Tim,
>
> I am getting following message from client using MQTT
>
> {
>         "header": {
>                 "messageId": "fcbef565-18ea-429a-836f-7e24d9b53743",
>                 "jwtToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.
> eyJ1bmlxdWVfbmFtZSI6IndpaW5pa3B2dCIsInN1YiI6IndpaW5pa3B2dCIs
> ImtpZCI6ImMxMzFhMWI0LWU0YWUtNGUwNC1hMGYwLWViNzViYThjYTFjMyIs
> IkV4dGVybmFsU3RhZmZSZWZlcmVuY2UiOiJmZWNiMDQ1Ny05MmNhLTRmMDAt
> OTIwNC1lZjAwNTYzZDgxZGIiLCJFeHRlcm5hbEN1c3RvbWVyUmVmZXJlbmNl
> IjoiYTkxZWYzMTYtNTJhMi00ZWE0LTk3ZDMtNDI5MDhhMGNjYjQ3IiwiQWRB
> Y2NvdW50IjoibndpN2E0IiwiRnVuY3Rpb25hbFBlcm1pc3Npb25zIjoiNDkx
> MDA3IiwiVXNlclBlcm1pc3Npb25zIjpbIjI0NDUxMTQ3NTAiLCI5OTIiXSwi
> aXNzIjoiaHR0cHM6Ly9mbXNkZXZhdXRoLnNjYW5pYS5jb20vIiwiYXVkIjoi
> MmMxNzk2NzktN2VjMS00MGQxLTkxNjAtNjk3NjEyOTg0ZDg1IiwiZXhwIjox
> NTE1Njc5Njk4LCJuYmYiOjE1MTU2NzYwOTh9.Olt1zXeDA1sndO1d4M1y07uSBzj7Bx
> A6Plvmf8TCLfeQhh3-Fyx-wMIyHhXWSNFgI6tRDVL0heJftxATcGbe_
> 0u1nVp0vwnrTO7PuGuKzEhWYXFlGs83IasN7hIidOp1qP9hXzi3i_
> VKVNa0wILUsuBMza7nkPd7xuTgCqacuFDpBZowyt-V1PUvqyj2Gd50ADh_ouuazO3akN_
> xHCFENJGDXLx91ABuJbGGiUsPI16uDcxAzDmfeKgnwbF5Zs8dw3TE_
> LiiBCcICMKx81rp6L_RTkPuoe5Umv-Y2ihfcnDt1trp36TvpUsSa-
> TqtcvZntwkDBcCNKhoyEB5FokMxatK5xgnpjqpj1kwZmHqfzfsJwFDBHY9Cd
> 73UQpigmarLc7RgyWL3O_QZXxDeVP1vxO4V2NK1im3Jc0BjL4vs
> rcIqrWUn_v4pJCMQMFtSZ2hkg8Yw_VRnrvJToF4z9OJa_yDN__bIC5_
> Ezl4HvvJ6jTrkr1sqQTJKq4ipyx-4pG9Ns5KPZezjgEraBMENcAHzCcIpI
> vI53Bmu6aPneFgEjOAQaJ5Dgzu-Cr4fesjEgIyBVt2bHPGa-ztAA7pfop-3BXsVjwXPsbc_7-
> tQanCr_gANHtZXQYXvjxM14PFuZAjc-GERg9IkCokgRd3x8xYlNWhRtiCZ47kflNNwt1_QVo",
>                 "correlId": "",
>                 "initialMessageid": "fcbef565-18ea-429a-836f-
> 7e24d9b53743",
>                 "environment": "st5",
>                 "producerUTCTimestamp": 1515677099337,
>                 "contractId": "SCCO3822",
>                 "producerVer": "1.0",
>                 "messageType": "SendChatMessageInConversationMessage",
>                 "appId": "fma",
>                 "messageTypeVer": "1.0",
>                 "receivers": []
>         },
>         "body": {
>                 "conversationId": "2b575462-97bd-4e9a-8ac4-6fec793c836a",
>                 "chatMessageId": "098ee4e7-8976-4c21-8f0a-521873fd6ac5",
>                 "content": "grte",
>                 "attachments": []
>         }
> }
>
> I am validating the message by validating the jwt token. I don’t want
> jwtToken field in message once I have validate it and used following to
> remove it:
>
> for (JsonNode jsonNode : jsonNodeRoot) {
>            if (jsonNode instanceof ObjectNode) {
>                ObjectNode o = (ObjectNode) jsonNode;
>                o.remove("jwtToken");
>
>            }
>        }
>
> But how to publish a message on topic once I have done the following
> checks on it? What method I can use here?
>
> Also I wish to add certain attributes in the message header and then
> publish on the topic how I can do that also?
>
> Thank You in Advance
>
> Regards,
> Bharat Gupta
>
>
> -----Original Message-----
> From: tbain98@gmail.com [mailto:tbain98@gmail.com] On Behalf Of Tim Bain
> Sent: den 2 januari 2018 06:27
> To: ActiveMQ Users <users@activemq.apache.org>
> Cc: users-owner@activemq.apache.org
> Subject: Re: ActiveMQ custom plugin
>
> I spent a little time this evening looking through the ActiveMQ 5.x code
> and didn't find an obvious way to hook into the MQTT-specific pieces, so
> switching to Artemis may be your best bet.
>
> Tim
>
> On Wed, Dec 13, 2017 at 7:02 AM, Tim Bain <tbain@alumni.duke.edu> wrote:
>
> > Bharat,
> >
> > I hadn't caught that this question was about making the connection rather
> > vs. the first question about sending messages across it; thanks for
> helping
> > me understand your question.
> >
> > As far as I know, the interception capabilities of 5.x apply only to the
> > core broker using the interface you used in the earlier messages in this
> > thread, but not to the code that translates non-OpenWire protocols such
> as
> > MQTT into OpenWire. I'll need to spend some time digging through the code
> > to make sure there isn't an MQTT plugin capability I don't know about,
> and
> > I probably won't get a chance to do that until the weekend. But unless I
> > find something unexpected when I do that digging, what you want may not
> be
> > possible with ActiveMQ 5.x. If as you say Artemis allows you to do
> > everything you're trying to do, then switching to it may be a good
> option.
> >
> > Tim
> >
> > On Dec 12, 2017 8:07 AM, "Gupta Bharat" <bharat.gupta@scania.com> wrote:
> >
> >> Yes the question I asked here is not answered earlier. In previous
> >> threads/mail focus was on when client was publishing a message on topic
> the
> >> activemq.send method was called to intercept the message before it
> actually
> >> published on topic.
> >>
> >> Here I am majorly focusing on intercepting mqtt connections, which means
> >> intercepting the client request to activemq and Call my plugin there. So
> >> which method of activemq can be used here?
> >>
> >> As I went thru many solutions over internet and see Artemis as an
> option.
> >>
> >> I hope I am able to put my point clear now. :) please let me know if
> more
> >> info is needed from my end.
> >>
> >>
> >>
> >> Sent from my iPhone
> >>
> >> On 12 Dec 2017, at 15:00, Tim Bain <tbain@alumni.duke.edu<mailto:
> >> tbain@alumni.duke.edu>> wrote:
> >>
> >> Is there some aspect of your question that's not answered by the first
> >> 12(!) emails in the thread? I'm not clear why you're asking what appears
> >> to
> >> be the same question again. If there's some new aspect of the question
> or
> >> something that wasn't previously answered, please highlight what it is.
> >>
> >> And no, I don't believe that Artemis is required to do what you're
> trying
> >> to do. It might be equally possible to do in Artemis compared to doing
> in
> >> 5.x (I don't know Artemis well enough to comment on whether this can be
> >> done in Artemis), but you definitely don't "have to use Artemis here to
> >> achieve this."
> >>
> >> Tim
> >>
> >> On Dec 12, 2017 1:31 AM, "Gupta Bharat" <bharat.gupta@scania.com<
> mailto:
> >> bharat.gupta@scania.com>> wrote:
> >>
> >> hello again,
> >>
> >> I am asking my question here again if you can possibly help me with a
> >> method.
> >>
> >> 1. Need to intercept the Incoming connections from MQTT clients.
> >> User is connecting to activemq broker by hitting on url and sending a
> >> TOKEN [(hostname:port) + token]
> >>
> >> How can we intercept the connections and validate the token sent by mqtt
> >> client?
> >>
> >> I have my own custom plugin that will validate the token. Just Need to
> >> know method on which we can call that Plugin.
> >>
> >> Also do we have to use Artemis here to achieve this?
> >>
> >> Thanks In Advance
> >>
> >> Regards,
> >> Bharat Gupta
> >> Development & Support | Platform Technician, IXCB | Scania IT
> >> Mobile: +46700869007, +91-9718483802
> >> bharat.gupta@scania.com<mailto:bharat.gupta@scania.com>
> >>
> >> -----Original Message-----
> >> From: tbain98@gmail.com<mailto:tbain98@gmail.com> [mailto:
> >> tbain98@gmail.com] On Behalf Of Tim Bain
> >> Sent: Tuesday, December 5, 2017 7:29 PM
> >> To: ActiveMQ Users <users@activemq.apache.org<mailto:
> >> users@activemq.apache.org>>
> >> Cc: users-owner@activemq.apache.org<mailto:users-owner@activemq.
> >> apache.org>
> >> Subject: RE: ActiveMQ custom plugin
> >>
> >> I'd suggest that you store your cache of known credentials in your
> plugin.
> >> I'm not sure that you'd have access to the web session from a plugin,
> >> because that's MQTT-specific, so I think your best bet would be to store
> >> it
> >> in a Map (better: a Guava cache, so you get free age-off behavior)
> within
> >> your plugin.
> >>
> >> Tim
> >>
> >> On Dec 5, 2017 3:50 AM, "Gupta Bharat" <bharat.gupta@scania.com<mailto:
> >> bharat.gupta@scania.com>> wrote:
> >>
> >> Hi Tim,
> >>
> >> I am having a scenario here. Using custom plugin I am validating my JWT
> >> tokens and fetching the claims from it.
> >>
> >> Claims:
> >>
> >> {
> >>  "unique_name": "gubhpi",
> >>  "sub": "gubhpi",
> >>  "kid": "1d884b7a-88ce-40e7-9bb8-f5e8f6b5837d",
> >>  "ExternalStaffReference": "0a8395d7-50b5-4cd8-ac68-6213da955f1c",
> >>  "ExternalCustomerReference": "acab53e8-a134-4bb8-a66d-3e80430ec4d1",
> >>  "AdAccount": "bguvvw",
> >>  "FunctionalPermissions": "490879",
> >>  "UserPermissions": [
> >>    "2482503678 <(248)%20250-3678>",
> >>    "1006"
> >>  ],
> >>  "iss": "https://xyz/",
> >>  "aud": "58b99b37-db1c78d7fef5",
> >>  "exp": 1510240047,
> >>  "nbf": 1510236447
> >> }
> >>
> >> From this I need to fetch "AdAccount": "bguvvw", and store it
> >> somewhere(please suggest me-- context or session) and when next time
> user
> >> sends me message on activemq using mqtt or web socket I need to check
> the
> >> message header with the users stored in contextsession or from some
> >> object.
> >> If user is present then we validate else we don’t.
> >>
> >>
> >> Regards,
> >> Bharat Gupta
> >> Development & Support | Platform Technician, IXCB | Scania IT
> >> Mobile: +46700869007, +91-9718483802
> >> bharat.gupta@scania.com<mailto:bharat.gupta@scania.com>
> >>
> >> -----Original Message-----
> >> From: tbain98@gmail.com<mailto:tbain98@gmail.com> [mailto:
> >> tbain98@gmail.com] On Behalf Of Tim Bain
> >> Sent: den 29 november 2017 04:20
> >> To: ActiveMQ Users <users@activemq.apache.org<mailto:
> >> users@activemq.apache.org>>
> >> Cc: users-owner@activemq.apache.org<mailto:users-owner@activemq.
> >> apache.org>
> >> Subject: RE: ActiveMQ custom plugin
> >>
> >> On Nov 28, 2017 8:37 AM, "Gupta Bharat" <bharat.gupta@scania.com<
> mailto:
> >> bharat.gupta@scania.com>> wrote:
> >>
> >> Hello Tim,
> >>
> >> Thank you for your help. :)
> >>
> >> I have used below method to fetch that text from message when client
> >> publish on topic and it works.
> >>
> >> public void send(ProducerBrokerExchange producerExchange, Message
> >> messageSend) throws Exception {
> >> byte[] msg = ((ActiveMQMessage) messageSend).getContent().data;
> >>
> >>
> >> ((ActiveMQTextMessage)messageSend).getText()
> >> It returns the text from web console only.
> >>
> >>
> >> Really appreciate your help here. :)
> >>
> >>
> >>
> >> Great, I'm glad I've been able to help.
> >>
> >> ------------------------------------------------------------
> >> ------------------------------------------------------------
> >> ------------------------------------------------------------
> >> -----------------------
> >>
> >> Apart from this I have a situation here that when I try to execute below
> >> code:
> >> 1. Destination dest = session.createQueue("JWT_PAYLOAD"); ---- it is
> >> creating a queue
> >> 2. TextMessage claims = session.createTextMessage(payload); ---
> >> converting
> >> the string to message to send it on above made queue
> >> 3. producer.send(dest, claims); --- send the message on
> >> ActiveMQ.Advisory.Producer.Queue.JWT_PAYLOAD instead of queue
> >> JWT_PAYLOAD
> >> why?
> >>
> >>
> >> What makes you think that this message on an advisory topic was your
> >> message instead of a standard advisory message that's sent anytime a
> >> non-anonymous producer sends a message? What makes you think that thos
> >> message was sent instead of the message you sent to your queue, rather
> >> than
> >> sent *in addition to* the message on your queue? Can you share
> >> before-and-after screenshots of your queue's row on the Queues page of
> >> the
> >> web console? And were there any warnings or errors logged in the
> broker's
> >> logs when this happened?
> >>
> >> 4. Before executing producer.send(dest, claims); ----- it is going on
> >> byte[] msg = ((ActiveMQMessage) messageSend).getContent().data and
> >> returning null as it is again checking for Content and data. So my ques
> >> is
> >> why it is going back again on first line? Why it is not simply putting
> >> the
> >> data on queue?
> >>
> >>
> >> I didn't understand what you meant by "it is going back again on first
> >> line." Are you saying that the broker is putting the original message
> >> onto
> >> your topic? If so, that's because by calling super.send(), you're
> >> allowing
> >> the publishing of the original message to the original topic to
> >> continue. I
> >> advised you to do that because I didn't realize that you wanted to
> >> transform the message and publish it to a different destination, but
> >> since
> >> it seems like you do, I think you don't want to call super.send() after
> >> all.
> >>
> >> If that's not what you meant, then please help me to better understand
> >> your
> >> question.
> >>
> >> @Override
> >>        public void send(ProducerBrokerExchange producerExchange, Message
> >> messageSend) throws Exception {
> >> if(messageSend != null)
> >> {
> >>        if(messageSend.getContent() != null)
> >> {
> >>        =               byte[] msg = ((ActiveMQMessage)
> >> messageSend).getContent().data;
> >>
> >>                String message = new String(msg);
> >>                logger.warn("messageBody::::::::::::::::              "
> >> +
> >> message);
> >>
> >>                DecodedJWT jwt = JWT.decode(message);
> >>                byte[] contentBytes = String.format("%s.%s",
> >> jwt.getHeader(), jwt.getPayload())
> >>                                .getBytes(StandardCharsets.UTF_8);
> >>                byte[] signatureBytes = Base64.decodeBase64(jwt.
> >> getSignature());
> >>                String publicKeyPEM = "-----BEGIN PUBLIC KEY-----\n"
> >>                                + "please enter your key"
> >>                                + "-----END PUBLIC KEY-----";
> >>
> >>                RsaKeyUtil rsaKeyUtil = new RsaKeyUtil();
> >>                PublicKey pk = rsaKeyUtil.fromPemEncoded(publicKeyPEM);
> >>
> >>                Security.addProvider(new BouncyCastleProvider());
> >>                Signature signatureInstance =
> >> Signature.getInstance("SHA256withRSA",
> >> "BC");
> >>                signatureInstance.initVerify(pk);
> >>                signatureInstance.update(contentBytes);
> >>                boolean result = signatureInstance.verify(
> >> signatureBytes);
> >>
> >>                byte[] pload = Base64.decodeBase64(jwt.getPayload());
> >>
> >>                String payload = new String(pload);
> >>                logger.warn("messageBody::::::::::::::::              "
> >> +
> >> payload);
> >>                logger.warn("result::::::::::::::::              " +
> >> result);
> >>                if (result = true) {
> >>
> >>                        // Create a ConnectionFactory
> >>            ActiveMQConnectionFactory connectionFactory = new
> >> ActiveMQConnectionFactory("vm://localhost");
> >>
> >>            // Create a Connection
> >>            javax.jms.Connection jmsConnection = connectionFactory.
> >> createConnection();
> >>            jmsConnection.start();
> >>
> >>            // Create a Session
> >>            Session session = jmsConnection.createSession(false,
> >> Session.AUTO_ACKNOWLEDGE);
> >>
> >>                Destination dest = session.createQueue("JWT_PAYLOAD");
> >>                        MessageProducer producer =
> >> session.createProducer(dest);
> >>                        producer.setDeliveryMode(
> >> DeliveryMode.PERSISTENT);
> >>
> >>                        TextMessage claims = session.createTextMessage(
> >> payload);
> >>                        claims.setJMSType("TEXT");
> >>                        logger.warn("CLAIMS>>>>>>>>>>>>>>>>
 " +
> >> claims);
> >>                        producer.send(dest, claims);
> >>                        logger.fatal("CLAIMS>>>>>>>>>>>>>>>>
 " +
> >> claims);
> >>
> >>
> >> //
> >>                        MessageConsumer consumer =
> >> session.createConsumer(dest);
> >>                        consumer.setMessageListener(this);
> >>
> >>                }
> >>
> >>                else {
> >>
> >>                        logger.warn("Else Authentication failed. Please
> >> send Valid Token");
> >>                }
> >>
> >>                super.send(producerExchange, messageSend);
> >>                // getNext().send(producerExchange, messageSend);
> >>
> >>        }
> >>
> >>        else
> >>        {
> >>                logger.fatal("MESSAGE SEND CONTENT IS NULL");
> >>        }
> >>        }
> >> else
> >> {
> >>        logger.fatal("MESSAGE SEND IS NULL");
> >> }
> >>        }
> >>
> >>        @Override
> >>        public void onMessage(javax.jms.Message message) {
> >>                  String messageText = null;
> >>                try {
> >>                    if (message instanceof TextMessage) {
> >>                        TextMessage textMessage = (TextMessage) message;
> >>                        messageText = textMessage.getText();
> >>                        System.out.println("messageText = " +
> >> messageText);
> >>                    }
> >>                } catch (JMSException e) {
> >>                    //Handle the exception appropriately
> >>                }
> >>        }
> >>
> >> Regards,
> >> Bharat Gupta
> >> Development & Support | Platform Technician, IXCB | Scania IT
> >> Mobile: +46700869007 <+46%2070%20086%2090%2007>, +91-9718483802
> >> <+91%2097184%2083802>
> >> bharat.gupta@scania.com<mailto:bharat.gupta@scania.com>
> >>
> >> -----Original Message-----
> >> From: tbain98@gmail.com<mailto:tbain98@gmail.com> [mailto:
> >> tbain98@gmail.com] On Behalf Of Tim Bain
> >> Sent: den 27 november 2017 08:12
> >> To: ActiveMQ Users <users@activemq.apache.org<mailto:
> >> users@activemq.apache.org>>
> >> Cc: users-owner@activemq.apache.org<mailto:users-owner@activemq.
> >> apache.org>
> >> Subject: Re: ActiveMQ custom plugin
> >>
> >> Thank you for providing that code. I spent some time running your code,
> >> and
> >> found the following problems with it, which are causing this to not work
> >> as
> >> you intended:
> >>
> >>   1. The signature for the send() method is "public void
> >>   send(ProducerBrokerExchange producerExchange, Message messageSend)
> >> throws
> >>   Exception," not the signature you had defined. Because your signature
> >>   didn't match the method you were trying to override, you weren't
> >> actually
> >>   overriding a method that would be called when a message was sent, but
> >>   instead you were simply defining a public method that nothing ever
> >> called.
> >>   The compiler would have caught this for you if you'd annotated the
> >> method
> >>   as @Override; you should be using that annotation for all overriden
> >>   methods, for exactly this reason.
> >>   2. messageSend.getContent() returns null for the test message I sent
> >> via
> >>   the web console, but ((ActiveMQTextMessage)messageSend).getText()
> >> returns
> >>   the body. I think this same code would work for an MQTT message, but
> >> since
> >>   I've never used MQTT you'll need to confirm that.
> >>   3. I mentioned this earlier, but your send() method needs to call
> >>   super.send() at the end, otherwise the broker's not going to process
> >> any
> >>   messages and you're going to be wondering why the broker "doesn't
> >> work."
> >>   This doesn't explain why you're not seeing your logging occur, but
> >> once
> >> we
> >>   get past that problem, this is the next issue you're going to hit.
> >>
> >> Tim
> >>
> >> On Sun, Nov 26, 2017 at 12:41 PM, Gupta Bharat <bharat.gupta@scania.com
> >> <mailto:bharat.gupta@scania.com>>
> >> wrote:
> >>
> >> 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<http://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<http://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<http://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<
> http://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.gupta@scania.com<mailto:bharat.gupta@scania.com><mailto:
> >> bharat.gupta@scania.com>
> >>
> >> From: tbain98@gmail.com<mailto:tbain98@gmail.com> [mailto:
> >> tbain98@gmail.com] On Behalf Of Tim
> >> Bain
> >> Sent: Sunday, November 26, 2017 4:31 AM
> >> To: ActiveMQ Users <users@activemq.apache.org<mailto:
> >> users@activemq.apache.org>>
> >> Cc: users-owner@activemq.apache.org<mailto:users-owner@activemq.
> >> apache.org>
> >> Subject: RE: ActiveMQ custom plugin
> >>
> >>
> >>
> >> On Nov 24, 2017 5:44 PM, "Gupta Bharat" <bharat.gupta@scania.com<
> mailto:
> >> bharat.gupta@scania.com><
> >> mailto:
> >> bharat.gupta@scania.com<mailto:bharat.gupta@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<http://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.gupta@scania.com<mailto:bharat.gupta@scania.com><mailto:
> >> bharat.gupta@scania.com>
> >>
> >>
> >>
> >>
> >> -----Original Message-----
> >> From: tbain98@gmail.com<mailto:tbain98@gmail.com><mailto:tbain98@g
> >> mail.com> [mailto:
> >> tbain98@gmail.com<mailto:tbain98@gmail.com><mailto:tbain98@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><mailto:
> >> users@activemq.apache.org<mailto:users@activemq.apache.org>>>
> >> Cc: users-owner@activemq.apache.org<mailto:users-owner@activemq.
> >> apache.org><mailto:users-owner@
> >> activemq.apache.org<http://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.gupta@scania.com<
> mailto:
> >> bharat.gupta@scania.com><
> >> mailto:
> >> bharat.gupta@scania.com<mailto:bharat.gupta@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><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><
> 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.gupta@scania.com<mailto:bharat.gupta@scania.com><mailto:
> >> bharat.gupta@scania.com>
> >>
> >>
> >>
> >>
> >>
> >> -----Original Message-----
> >>
> >> From: tbain98@gmail.com<mailto:tbain98@gmail.com><mailto:tbain98@g
> >> mail.com> [mailto:
> >> tbain98@gmail.com<mailto:tbain98@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><mailto:
> >> users@activemq.apache.org<mailto:users@activemq.apache.org>>>
> >>
> >> Cc: users-owner@activemq.apache.org<mailto:users-owner@activemq.
> >> apache.org><mailto:users-owner@
> >> activemq.apache.org<http://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.gupta@scania.com<
> mailto:
> >> bharat.gupta@scania.com><
> >> mailto:
> >> bharat.gupta@scania.com<mailto:bharat.gupta@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
> >> <+91%2097184%2083802>
> >> <tel:+91%2097184%2083802>
> >>
> >> bharat.gupta@scania.com<mailto:bharat.gupta@scania.com><mailto:
> >> bharat.gupta@scania.com<mailto:
> >> bharat.gupta@scania.com<mailto:bharat.gupta@scania.com>%3cma
> >> ilto:bharat.gupta@scania.com<mailto:bharat.gupta@scania.com>>>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message