2012-03-02 98 views
3

环境:javax.jms.JMSSecurityException:无法验证用户:空

的Jboss 7.1.0 操作系统Windows

我想要一个简单的测试来尝试使用JBoss的JMS内置的HornetQ的JMS供应商。大量的玩耍后,我设法让这种配置的响应

 final Properties env = new Properties(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
     env.put(Context.PROVIDER_URL, "remote://localhost:4447"); 
     env.put(Context.SECURITY_PRINCIPAL, "appuser2"); 
     env.put(Context.SECURITY_CREDENTIALS, "s3cr3t");   

的问题是,虽然当我运行它,我得到以下错误:

javax.jms.JMSSecurityException: Unable to validate user: null 
    at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:286) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.createSessionInternal(ClientSessionFactoryImpl.java:695) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.createSession(ClientSessionFactoryImpl.java:264) 
    at org.hornetq.jms.client.HornetQConnection.authorize(HornetQConnection.java:589) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:694) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:121) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:116) 
    at com.jms.client.ConsoleClient.runExample(ConsoleClient.java:51) 
    at com.jms.client.ConsoleClient.main(ConsoleClient.java:20) 
Caused by: HornetQException[errorCode=105 message=Unable to validate user: null] 
    ... 9 more 

我一直环顾谷歌和每个例子似乎都指出如何将HornetQ的安全设置配置为独立服务器。我无法弄清楚如何在Jboss上配置用户,以及我是否需要。

任何想法?

+0

记得有这个问题前一段时间与JBoss 5.1.0GA。我记得通过在hornetq.sar/hornetq-users.xml中添加适当的用户/每个队列来修复它。 我不知道HornetQ是如何在JBoss 7中使用的,但也许这个提示会指向你正确的方向。 – Sergiu 2012-03-06 11:39:44

回答

0

我同意Sergiu,并会添加队列可以设置,无需用户名和密码。

14

看来你创建一个用户名和密码QueueConnection如下:

QueueConnection qcon = qconFactory.createQueueConnection("appuser2","s3cr3t"); 

如果你不这样做,你会得到这个错误

Unable to validate user: null.

如果你不这样做想要使用用户名和密码,您可以设置值为false的安全启用,如下所示:

<subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
    <hornetq-server> 
     <security-enabled>false</security-enabled> 
     ...... 
    </hornetq-server> 
</subsystem> 

然后你可以创建一个QueueConnection没有用户名和密码如下:

QueueConnection qcon = qconFactory.createQueueConnection(); 
+0

这工作正常! – Shalika 2017-08-30 06:56:07

1

它为我工作。我在standalone-full.xml中添加了以下内容:

  <security-enabled>false</security-enabled> 
1

检查您的standalone-full.xml。如果urn:jboss:domain:messaging-activemq:1.0这个样子的配置的角色:

<security-setting name="#"> 
     <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/> 
</security-setting> 

然后,你必须:

  1. 创建来宾用户(请确保您设置的角色guest给用户);
  2. 设置如下所示的初始上下文:

Properties props = new Properties(); props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080"); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); props.put(Context.SECURITY_PRINCIPAL, "username"); props.put(Context.SECURITY_CREDENTIALS, "password"); InitialContext ctx = new InitialContext(props);

  • 创建上下文如下:
  • ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); Queue queue = (Queue) ctx.lookup("jms/queue/queueName"); JMSContext context = cf.createContext("username", "password");