Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jms 用户没有权限=使用Artemis 2.10.1中的自定义JAAS模块发送_Jms_Jaas_Activemq Artemis - Fatal编程技术网

Jms 用户没有权限=使用Artemis 2.10.1中的自定义JAAS模块发送

Jms 用户没有权限=使用Artemis 2.10.1中的自定义JAAS模块发送,jms,jaas,activemq-artemis,Jms,Jaas,Activemq Artemis,我正在使用定制JAAS模块,在login.config、artemis.profile和broker.xml中进行必要的配置更改 login.config: activemq { test.JaasLoginModule required debug=false; }; JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true"

我正在使用定制JAAS模块,在
login.config
artemis.profile
broker.xml
中进行必要的配置更改

login.config

activemq { test.JaasLoginModule required debug=false; };
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=test.RolePrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
JaasLoginModule.java

activemq { test.JaasLoginModule required debug=false; };
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=test.RolePrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
public boolean commit()抛出LoginException{
如果(成功){
添加(新用户主体(“测试用户”);
principals.add(newroleprincipal(“amq”);//设置角色
subject.getPrincipals().addAll(principals);
}
返回成功;
}
public boolean login()引发LoginException{
//在这里,我返回true,其中包含硬编码的用户详细信息
}
}
阿耳特弥斯档案

activemq { test.JaasLoginModule required debug=false; };
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=test.RolePrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
broker.xml

activemq { test.JaasLoginModule required debug=false; };
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=test.RolePrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"

以下是客户端代码:

Properties p=新属性();
p、 put(“java.naming.factory.initial”、“org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory”);
p、 放置(“connectionFactory.connectionFactory”tcp://localhost:61616");
p、 put(“queue.queue/testQueue”、“testQueue”);
initialContext=新的initialContext(p);
Queue Queue=(Queue)initialContext.lookup(“Queue/testQueue”);
ConnectionFactory cf=(ConnectionFactory)initialContext.lookup(“ConnectionFactory”);
连接=cf.createConnection(“测试用户”、“测试123”);
会话会话=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
MessageProducer=session.createProducer(队列);
Queue Queue=(Queue)initialContext.lookup(“Queue/testQueue”);
TextMessage=session.createTextMessage(“这是一条短信”);
生产者。发送(消息);
我得到以下错误:

Exception in thread "main" javax.jms.JMSSecurityException: AMQ229032: User:**** does not have permission='SEND' on address testQueue

问题解决了。我的自定义JAAS模块加载到artemis中,能够验证和授权客户端进行消息传递。我的模块不工作的原因是因为我在JAAS模块中使用了自定义的
RolePrincipal
类:

-Dhawtio.rolePrincipalClasses=test.UserPrincipal
如果我使用ArtemisAPI中的一个,它工作得很好

-Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal
阿耳特弥斯档案

activemq { test.JaasLoginModule required debug=false; };
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=test.RolePrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"
JAVA_ARGS="-XX:+PrintClassHistogram -XX:+UseG1GC -Xms512M -Xmx2G -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml"

login.config:activemq{test.JaasLoginModule required debug=false;};broker.xml:artemis.prfile:#Java选择Java_ARGS=“-XX:+PrintClassHistogram-XX:+UseG1GC-Xms512M-Xmx2G-Dhawtio.realm=activemq-Dhawtio.offline=“true“-Dhawtio.role=amq-Dhawtio.rolePrincipalClasses=test.RolePrincipal-Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml“嗨,Justin,我的目标是使用自定义JAAS模块对发送消息的客户端进行身份验证。为此,我创建了一个代理,使用artemis命令行,然后进行必要的更改以测试它。部署JAAS模块后,我使用简单的JMS代码创建队列并发送消息。最初,我在创建队列时出错,因此,我已更改为使用管理员(原始)授权创建队列,然后尝试使用JMS客户端发送消息。您能帮忙吗?“hawtio.role”是默认的amq。正在尝试查看如何发送客户端和test.JaasLoginModule的代码