jms - HornetQ Unable to validate user -
i using jboss 6 final on ubuntu hornetq
i have created new queue on server named message buffer queue using admin panel.
i following error:
unable validate user: guest check type consume address jms.queue.messagebufferqueue here files:
package org.jboss.ejb3timers.example; import java.text.dateformat; import java.text.simpledateformat; import java.util.enumeration; import java.util.hashtable; import java.util.uuid; import javax.jms.connection; import javax.jms.connectionfactory; import javax.jms.message; import javax.jms.messageconsumer; import javax.jms.messageproducer; import javax.jms.objectmessage; import javax.jms.queue; import javax.jms.queuebrowser; import javax.jms.queueconnection; import javax.jms.queueconnectionfactory; import javax.jms.queuesession; import javax.jms.session; import javax.naming.context; import javax.naming.initialcontext; public class testclass { connectionfactory hconnection=null; queue q=null; connection hconn=null; context lcontext=null; messageconsumer messageconsumer=null; messageproducer messageproducer=null; javax.jms.session session=null; /** * @param args */ public void sendmessagetojms(string sender,string receiver,string message,string smsc,string credit,string userid,long ctime,string savenumber) { int count=0; hashtable<string, string> ht = new hashtable<string, string>(); ht.put(context.initial_context_factory, "org.jnp.interfaces.namingcontextfactory"); ht.put(context.provider_url, "127.0.0.1"); ht.put(context.url_pkg_prefixes, "org.jboss.naming:org.jnp.interfaces"); try{ lcontext = new initialcontext(ht); hconnection = (connectionfactory) lcontext.lookup("connectionfactory"); q = (queue) lcontext.lookup("queue/messagebufferqueue"); hconn = (connection) hconnection.createconnection("guest","guest"); session = hconn.createsession(false, session.auto_acknowledge); messageproducer = session.createproducer(q); /* * insert database */ uuid id=uuid.randomuuid(); hconn.start(); textmsg msg = new textmsg(); msg.setreciever(receiver); msg.setsender(sender); msg.settext(message); msg.setsmsc(smsc); msg.setcredit(credit); msg.setuserid(userid); msg.setctime(ctime); msg.setid(id.tostring()); objectmessage message = session.createobjectmessage(); message.setobject(msg); messageproducer.send(message); system.out.println("message sent "); hconn.close(); } catch(exception ex) { ex.printstacktrace(); } } public int getqueuesize() { hashtable<string, string> ht = new hashtable<string, string>(); ht.put(context.initial_context_factory, "org.jnp.interfaces.namingcontextfactory"); ht.put(context.provider_url, "127.0.0.1"); ht.put(context.url_pkg_prefixes, "org.jboss.naming:org.jnp.interfaces"); initialcontext ctx; int nummsgs = 0; try { ctx = new initialcontext(ht); queueconnectionfactory connfactory = (queueconnectionfactory) ctx.lookup("connectionfactory"); queue queue = (queue) ctx.lookup("queue/messagebufferqueue"); queueconnection queueconn = connfactory.createqueueconnection("guest","guest"); queuesession queuesession = queueconn.createqueuesession(false,session.auto_acknowledge); queuebrowser queuebrowser = queuesession.createbrowser(queue); queueconn.start(); enumeration e = queuebrowser.getenumeration(); dateformat df = new simpledateformat("yyyy-mm-dd hh:mm:ss.ssssss");; string s=null; while (e.hasmoreelements()) { message message = (message) e.nextelement(); s = df.format(message.getjmstimestamp()); system.out.println("=================1===================timestamp got queue"+s); nummsgs++; } queueconn.close(); } catch (exception e1) { // todo auto-generated catch block system.out.println(e1.getmessage()); } return nummsgs; } public static void main(string[] args) { int = 0; testclass tc = new testclass(); system.out.println(tc.getqueuesize()); tc.sendmessagetojms("jk", "gv", "hey there", "somesmsc", "34", "thedon", 234233634, "2423487"); system.out.println(tc.getqueuesize()); } } my hornetq config file is
<configuration xmlns="urn:hornetq" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="urn:hornetq /schema/hornetq-configuration.xsd"> <!-- make queue persistent --> <persistence-enabled>true</persistence-enabled> <log-delegate-factory-class-name>org.hornetq.integration.logging.log4jlogdelegatefactory</log-delegate-factory-class-name> <bindings-directory>${jboss.server.data.dir}/hornetq/bindings</bindings-directory> <journal-directory>${jboss.server.data.dir}/hornetq/journal</journal-directory> <!-- default journal file size set 1mb faster first boot --> <journal-file-size>${hornetq.journal.file.size:1048576}</journal-file-size> <!-- default journal min file 2, increase higher average msg rates --> <journal-min-files>${hornetq.journal.min.files:2}</journal-min-files> <!-- create new user named guest default user --> <defaultuser name="guest" password="guest"> <role name="guest"/> </defaultuser> <!-- create new user named admin admin stuff --> <user name="admin" password="admin"> <role name="admin"/> </user> <large-messages-directory>${jboss.server.data.dir}/hornetq/largemessages</large-messages-directory> <paging-directory>${jboss.server.data.dir}/hornetq/paging</paging-directory> <connectors> <connector name="netty"> <factory-class>org.hornetq.core.remoting.impl.netty.nettyconnectorfactory</factory-class> <param key="host" value="${jboss.bind.address:localhost}"/> <param key="port" value="${hornetq.remoting.netty.port:5445}"/> </connector> <connector name="netty-throughput"> <factory-class>org.hornetq.core.remoting.impl.netty.nettyconnectorfactory</factory-class> <param key="host" value="${jboss.bind.address:localhost}"/> <param key="port" value="${hornetq.remoting.netty.batch.port:5455}"/> <param key="batch-delay" value="50"/> </connector> <connector name="in-vm"> <factory-class>org.hornetq.core.remoting.impl.invm.invmconnectorfactory</factory-class> <param key="server-id" value="${hornetq.server-id:0}"/> </connector> </connectors> <acceptors> <acceptor name="netty"> <factory-class>org.hornetq.core.remoting.impl.netty.nettyacceptorfactory</factory-class> <param key="host" value="${jboss.bind.address:localhost}"/> <param key="port" value="${hornetq.remoting.netty.port:5445}"/> </acceptor> <acceptor name="netty-throughput"> <factory-class>org.hornetq.core.remoting.impl.netty.nettyacceptorfactory</factory-class> <param key="host" value="${jboss.bind.address:localhost}"/> <param key="port" value="${hornetq.remoting.netty.batch.port:5455}"/> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </acceptor> <acceptor name="in-vm"> <factory-class>org.hornetq.core.remoting.impl.invm.invmacceptorfactory</factory-class> <param key="server-id" value="0"/> </acceptor> </acceptors> <security-settings> <security-setting match="#"> <permission type="createnondurablequeue" roles="guest"/> <permission type="deletenondurablequeue" roles="guest"/> <!-- admin can create durable , non durable queues --> <!-- add permisions make durabe queue guest --> <permission type="createdurablequeue" roles="admin"/> <!-- add permisions make durabe queue guest --> <permission type="deletedurablequeue" roles="admin"/> <permission type="consume" roles="guest"/> <permission type="send" roles="guest"/> </security-setting> </security-settings> <address-settings> <!--default catch all--> <address-setting match="#"> <dead-letter-address>jms.queue.dlq</dead-letter-address> <expiry-address>jms.queue.expiryqueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>10485760</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>block</address-full-policy> </address-setting> </address-settings> </configuration> my stack trace :
log4j:warn no appenders found logger (org.jnp.interfaces.timedsocketfactory). log4j:warn please initialize log4j system properly. unable validate user: guest check type consume address jms.queue.messagebufferqueue 0 javax.jms.jmssecurityexception: unable validate user: guest check type send address jms.queue.messagebufferqueue @ org.hornetq.core.protocol.core.impl.channelimpl.sendblocking(channelimpl.java:287) @ org.hornetq.core.client.impl.clientproducerimpl.dosend(clientproducerimpl.java:285) @ org.hornetq.core.client.impl.clientproducerimpl.send(clientproducerimpl.java:139) @ org.hornetq.jms.client.hornetqmessageproducer.dosend(hornetqmessageproducer.java:451) @ org.hornetq.jms.client.hornetqmessageproducer.send(hornetqmessageproducer.java:199) @ org.jboss.ejb3.timerservice.example.testclass.sendmessagetojms(testclass.java:70) @ org.jboss.ejb3.timerservice.example.testclass.main(testclass.java:117) caused by: hornetqexception[errorcode=105 message=unable validate user: guest check type send address jms.queue.messagebufferqueue] ... 7 more unable validate user: guest check type consume address jms.queue.messagebufferqueue 0 11 apr, 2011 7:35:54 pm org.hornetq.core.logging.impl.jullogdelegate warn warning: i'm closing jms connection left open. please make sure close jms connections explicitly before letting them go out of scope! what seems problem problem ?
it took me long time solve issue, , answer hornetq reference documentation:
jboss can configured allow client login, when java ee component such servlet or ejb sets security credentials on current security context , these used throughout call.
if these credentials used hornetq when sending or consuming messages set allowclientlogin true. bypass hornetq authentication , propgate provided security context. if hornetq authenticate using propogated security set authoriseonclientlogin true also.
the important part is: if these credentials used hornetq when sending or consuming messages set allowclientlogin true
in case, test purpose disactivated authentication in application, , credentials not propagated anymore in security context.
while trying create queues with
queueconnection = connectionfactory.createqueueconnection("guest", "guest"); got exception: hornetqexception[errorcode=105 message=unable validate user: guest
and when trying create queues with
queueconnection = connectionfactory.createqueueconnection(); got exception: hornetqexception[errorcode=105 message=unable validate user: null
after setting allowclientlogin true in $jboss_home/server//deploy/hornetq/hornetq-jboss-beans.xml, succed in creating queues.
<bean name="hornetqsecuritymanager" class="org.hornetq.integration.jboss.security.jbossassecuritymanager"> <start ignored="true"/> <stop ignored="true"/> <depends>jbosssecurityjndicontextestablishment</depends> <property name="allowclientlogin">true</property> <property name="authoriseonclientlogin">true</property> </bean>
Comments
Post a Comment