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.gu...@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: tbai...@gmail.com [mailto:tbai...@gmail.com] On Behalf Of Tim Bain > Sent: den 2 januari 2018 06:27 > To: ActiveMQ Users <users@activemq.apache.org> > Cc: users-ow...@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 <tb...@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.gu...@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 <tb...@alumni.duke.edu<mailto: > >> tb...@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.gu...@scania.com< > mailto: > >> bharat.gu...@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.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: Tuesday, December 5, 2017 7:29 PM > >> To: ActiveMQ Users <users@activemq.apache.org<mailto: > >> users@activemq.apache.org>> > >> Cc: users-ow...@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.gu...@scania.com<mailto: > >> bharat.gu...@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.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: den 29 november 2017 04:20 > >> To: ActiveMQ Users <users@activemq.apache.org<mailto: > >> users@activemq.apache.org>> > >> Cc: users-ow...@activemq.apache.org<mailto:users-owner@activemq. > >> apache.org> > >> Subject: RE: ActiveMQ custom plugin > >> > >> On Nov 28, 2017 8:37 AM, "Gupta Bharat" <bharat.gu...@scania.com< > mailto: > >> bharat.gu...@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.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: den 27 november 2017 08:12 > >> To: ActiveMQ Users <users@activemq.apache.org<mailto: > >> users@activemq.apache.org>> > >> Cc: users-ow...@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.gu...@scania.com > >> <mailto:bharat.gu...@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.gu...@scania.com<mailto:bharat.gu...@scania.com><mailto: > >> bharat.gu...@scania.com> > >> > >> From: tbai...@gmail.com<mailto: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<mailto: > >> users@activemq.apache.org>> > >> Cc: users-ow...@activemq.apache.org<mailto:users-owner@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>< > >> mailto: > >> 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<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.gu...@scania.com<mailto:bharat.gu...@scania.com><mailto: > >> bharat.gu...@scania.com> > >> > >> > >> > >> > >> -----Original Message----- > >> From: tbai...@gmail.com<mailto:tbai...@gmail.com><mailto:tbain98@g > >> mail.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><mailto: > >> users@activemq.apache.org<mailto:users@activemq.apache.org>>> > >> Cc: users-ow...@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.gu...@scania.com< > mailto: > >> bharat.gu...@scania.com>< > >> mailto: > >> 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><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.gu...@scania.com<mailto:bharat.gu...@scania.com><mailto: > >> bharat.gu...@scania.com> > >> > >> > >> > >> > >> > >> -----Original Message----- > >> > >> From: tbai...@gmail.com<mailto:tbai...@gmail.com><mailto:tbain98@g > >> mail.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><mailto: > >> users@activemq.apache.org<mailto:users@activemq.apache.org>>> > >> > >> Cc: users-ow...@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.gu...@scania.com< > mailto: > >> bharat.gu...@scania.com>< > >> mailto: > >> 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 > >> <+91%2097184%2083802> > >> <tel:+91%2097184%2083802> > >> > >> bharat.gu...@scania.com<mailto:bharat.gu...@scania.com><mailto: > >> bharat.gu...@scania.com<mailto: > >> bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>%3cma > >> ilto:bharat.gu...@scania.com<mailto:bharat.gu...@scania.com>>> > >> > >> > >> > >> > >> > >> > >> >