javax.jms.JMSSecurityException: невозможно проверить пользователя: null - PullRequest
3 голосов
/ 03 марта 2012

Окружающая среда:

Jboss 7.1.0 ОС Windows

Я пытаюсь провести простой тест для тестирования JMS с использованием Jboss со встроенным JMS-провайдером HornetQ. После долгих тренировок мне удалось получить ответ с этой конфигурацией

        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

Я искал в Google, и каждый пример указывает на то, как настроить параметры безопасности с HornetQ в качестве автономного сервера. Я не могу понять, как настроить пользователя на Jboss и нужно ли мне вообще.

Есть идеи?

Ответы [ 4 ]

15 голосов
/ 08 июля 2012

Похоже, что вы создаете QueueConnection с именем пользователя и паролем следующим образом:

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

Если вы этого не сделаете, вы получите эту ошибку

Невозможно проверить пользователя: 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();
2 голосов
/ 06 ноября 2015

у меня сработало.Я только что добавил следующее в standalone-full.xml:

            <security-enabled>false</security-enabled> 
1 голос
/ 09 августа 2017

Проверьте свой 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");
0 голосов
/ 25 апреля 2012

Я согласен с Sergiu и добавлю, что очередь может быть настроена без указания имени пользователя и пароля.

...