首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HornetQ无法验证用户

HornetQ无法验证用户
EN

Stack Overflow用户
提问于 2011-04-11 15:04:05
回答 2查看 13.3K关注 0票数 8

我使用hornetQ在ubuntu上使用jboss作为6决赛

我已经使用管理面板在服务器上创建了一个名为的新队列。

我得到以下错误:

代码语言:javascript
复制
Unable to validate user: guest for check type CONSUME for address jms.queue.MessageBufferQueue

这是我的档案:

代码语言:javascript
复制
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 into 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 it got to the 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 i = 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());
    }
}

我的HornetQ配置文件是

代码语言:javascript
复制
<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 is set to 1Mb for faster first boot -->
   <journal-file-size>${hornetq.journal.file.size:1048576}</journal-file-size>

   <!-- Default journal min file is 2, increase for higher average msg rates -->
   <journal-min-files>${hornetq.journal.min.files:2}</journal-min-files>

<!-- create new user named guest as the default user -->
<defaultuser name="guest" password="guest">
        <role name="guest"/>
    </defaultuser>
<!-- create new user named admin with 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 and non durable queues -->
<!-- Add permisions to make  a durabe queue for guest -->
         <permission type="createDurableQueue" roles="admin"/>
<!-- Add permisions to make  a durabe queue for guest -->
         <permission type="deleteDurableQueue" roles="admin"/>

         <permission type="consume" roles="guest"/>
         <permission type="send" roles="guest"/>
      </security-setting>
   </security-settings>

   <address-settings>
      <!--default for 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>

我的堆栈跟踪是:

代码语言:javascript
复制
log4j:WARN No appenders could be found for logger (org.jnp.interfaces.TimedSocketFactory).
log4j:WARN Please initialize the log4j system properly.
Unable to validate user: guest for check type CONSUME for address jms.queue.MessageBufferQueue
0
javax.jms.JMSSecurityException: Unable to validate user: guest for check type SEND for address jms.queue.MessageBufferQueue
    at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:287)
    at org.hornetq.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:285)
    at org.hornetq.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:139)
    at org.hornetq.jms.client.HornetQMessageProducer.doSend(HornetQMessageProducer.java:451)
    at org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:199)
    at org.jboss.ejb3.timerservice.example.TestClass.sendMessagetoJMS(TestClass.java:70)
    at org.jboss.ejb3.timerservice.example.TestClass.main(TestClass.java:117)
Caused by: HornetQException[errorCode=105 message=Unable to validate user: guest for check type SEND for address jms.queue.MessageBufferQueue]
    ... 7 more
Unable to validate user: guest for check type CONSUME for address jms.queue.MessageBufferQueue
0
11 Apr, 2011 7:35:54 PM org.hornetq.core.logging.impl.JULLogDelegate warn
WARNING: I'm closing a JMS connection you left open. Please make sure you close all JMS connections explicitly before letting them go out of scope!

问题似乎是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-02-25 17:58:12

解决这个问题花了我很长时间,答案是HornetQ参考文档:

JBoss可以配置为允许客户端登录,这基本上是当Java组件(如Servlet或EJB )在当前安全上下文上设置安全凭据,并且在整个调用过程中使用这些凭据时。

如果希望HornetQ在发送或使用消息时使用这些凭据,则将allowClientLogin设置为true。这将绕过HornetQ身份验证,并推进提供的安全上下文。如果希望HornetQ使用适当的安全性进行身份验证,那么也可以将authoriseOnClientLogin设置为true。

重要的部分是:如果您希望HornetQ在发送或使用消息时使用这些凭据,那么将allowClientLogin设置为true

在我的示例中,为了测试目的,我在应用程序中禁用了身份验证,因此凭据不再在安全上下文中传播。

创建队列时,

( connectionFactory.createQueueConnection("guest",“queueConnection”);我得到了异常: HornetQException[errorCode=105 message=Unable以验证用户:来宾

当尝试创建队列时,

queueConnection = connectionFactory.createQueueConnection();我得到了异常: HornetQException[errorCode=105 message=Unable以验证用户: null“

在$JBOSS_HOME/server//deploy/hornetq/hornetq-jboss-beans.xml,中将allowClientLogin设置为true之后,我最终成功地创建了队列。

<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>

票数 2
EN

Stack Overflow用户

发布于 2011-06-09 14:09:24

我在Jboss6 Final上也有类似的问题。

您正在使用安全域(例如,在您的<security-domain>unirepo</security-domain>)?

  • Is中,用户“来宾”“来宾”在您的安全域中通过身份验证)吗?(我知道这不应该是必要的,但似乎是JBoss6的一种奇怪行为)。

您还可以在这里查看一下:https://issues.jboss.org/browse/JBAS-8895http://community.jboss.org/message/587605

它可能在JBoss6.1中被修复:(

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5623295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档