连接到 ActiveMQ 目标时通过身份验证创建安全级别
Create a security level through authentification when connecting to a ActiveMQ destination
我使用 Apache Activemq 版本 5.14.4 将一些消息发送到队列中并读取它们。我想实现一个安全级别,以便在我连接到目的地时被要求提供用户名和密码。
阅读 ActiveMQ security and looking at a lot of examples including these: example1, example2 的官方文档,我选择使用 Simple Authentication Plugin 来实现。
因此,在我的 activemq.xml 中,我在代理元素中编写了插件:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="Admin01" password="anything" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" write="producers" read="consumers" admin="admins" />
<authorizationEntry topic="ActiveMQ.Advisory.>" admin="admins" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
...
</broker>
这样做时,我预计会被询问用户名和密码,以便连接到目标以使用队列中的消息。
我这样创建连接和目的地:
String username = "Admin01";
String password = "anithing"
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setTrustedPackages(Arrays.asList("myClass.package_name"));
Connection connection = null;
Session session = null;
Destination destination = null;
try {
connection = factory.createConnection(username, password);
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
...
ActiveMQ 代理已创建,当我要发送的事件发生时,它们将发送到 myQueue。
(我还尝试使用 factory.setPassword() 和 factory.setUserName() 将任何用户名和密码设置为工厂,或仅将用户名和密码设置为连接,或两者都设置,并且当我没有抛出异常不要设置任何用户名和密码)。
好吧,如果我想使用队列中的消息,我有意不设置任何密码并且没有抛出异常并且消息被使用。 (我预计会抛出一个异常,要求输入用户名和密码。我也尝试使用错误的用户名和密码)。
private void consumeMessage() {
String userName = "Admin01";
String password = "anything";
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// factory.setUserName(userName);
// factory.setPassword(password);
factory.setTrustAllPackages(true);
Destination destination = null;
try {
connection = factory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
connection.start();
}catch(JMSException e) {
e.printStackTrace();
}
}
我已经覆盖了 credentials.properties 文件:
默认值:
activemq.username=system
activemq.password=manager
guest.password=password
已覆盖:
activemq.username=Admin01
activemq.password=anything
我还覆盖了文件:
groups.properties 文件到 admins=Admin01
和 users.properties 到 admin=Admin01
,但仍然没有询问密码。
以上所有文件都在\apache-activemq-5.14.4\conf目录下。
我能做些什么来在 ActiveMQ 上实现这个安全级别,以便当我想连接到目的地以便使用来自 "myQueue" 的消息时被要求提供用户名和密码?
默认
<simpleAuthenticationPlugin anonymousAccessAllowed="false">
拒绝匿名访问。
我使用 Apache Activemq 版本 5.14.4 将一些消息发送到队列中并读取它们。我想实现一个安全级别,以便在我连接到目的地时被要求提供用户名和密码。
阅读 ActiveMQ security and looking at a lot of examples including these: example1, example2 的官方文档,我选择使用 Simple Authentication Plugin 来实现。
因此,在我的 activemq.xml 中,我在代理元素中编写了插件:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="Admin01" password="anything" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" write="producers" read="consumers" admin="admins" />
<authorizationEntry topic="ActiveMQ.Advisory.>" admin="admins" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
...
</broker>
这样做时,我预计会被询问用户名和密码,以便连接到目标以使用队列中的消息。
我这样创建连接和目的地:
String username = "Admin01";
String password = "anithing"
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setTrustedPackages(Arrays.asList("myClass.package_name"));
Connection connection = null;
Session session = null;
Destination destination = null;
try {
connection = factory.createConnection(username, password);
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
...
ActiveMQ 代理已创建,当我要发送的事件发生时,它们将发送到 myQueue。 (我还尝试使用 factory.setPassword() 和 factory.setUserName() 将任何用户名和密码设置为工厂,或仅将用户名和密码设置为连接,或两者都设置,并且当我没有抛出异常不要设置任何用户名和密码)。
好吧,如果我想使用队列中的消息,我有意不设置任何密码并且没有抛出异常并且消息被使用。 (我预计会抛出一个异常,要求输入用户名和密码。我也尝试使用错误的用户名和密码)。
private void consumeMessage() {
String userName = "Admin01";
String password = "anything";
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// factory.setUserName(userName);
// factory.setPassword(password);
factory.setTrustAllPackages(true);
Destination destination = null;
try {
connection = factory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
connection.start();
}catch(JMSException e) {
e.printStackTrace();
}
}
我已经覆盖了 credentials.properties 文件: 默认值:
activemq.username=system
activemq.password=manager
guest.password=password
已覆盖:
activemq.username=Admin01
activemq.password=anything
我还覆盖了文件:
groups.properties 文件到 admins=Admin01
和 users.properties 到 admin=Admin01
,但仍然没有询问密码。
以上所有文件都在\apache-activemq-5.14.4\conf目录下。
我能做些什么来在 ActiveMQ 上实现这个安全级别,以便当我想连接到目的地以便使用来自 "myQueue" 的消息时被要求提供用户名和密码?
默认
<simpleAuthenticationPlugin anonymousAccessAllowed="false">
拒绝匿名访问。