gpt4 book ai didi

java - 连接到 ActiveMQ 目标时通过身份验证创建安全级别

转载 作者:行者123 更新时间:2023-12-02 02:56:26 24 4
gpt4 key购买 nike

我使用 Apache Activemq 版本 5.14.4 将一些消息发送到队列中并读取它们。我想实现一个安全级别,以便当我连接到目的地时被要求提供用户名和密码。

阅读 ActiveMQ security 的官方文档并查看了很多示例,包括:example1 , example2 ,我选择使用简单例份验证插件来实现这一点。

因此,在我的 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 目录中。

当我想要连接到目标以使用来自“myQueue”的消息并要求输入用户名和密码时,我可以做什么来在 ActiveMQ 上实现此安全级别?

最佳答案

默认情况下 <simpleAuthenticationPlugin anonymousAccessAllowed="false">拒绝匿名访问。

关于java - 连接到 ActiveMQ 目标时通过身份验证创建安全级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42998738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com