0

团队,

我正在使用以下配置(http://activemq.apache.org/runtime-configuration.html)在 activemq.xml 中实现授权映射设置的运行时重新加载

<broker xmlns="http://activemq.apache.org/schema/core" start="false" ... >
    <plugins>
      <runtimeConfigurationPlugin checkPeriod="1000" />
    </plugins>
    ...
</broker>

我执行了测试用例,其中一个特定用例(关键)没有按预期工作。失败的测试用例是用户 A 对队列 A 具有读写访问权限。用户 A 成功读取和写入。但是,如果 User-A 的角色被删除,在不重新启动 ActiveMQ 的情况下,User-A 仍然能够读取和写入 Queue-A。预期结果是 ActiveMQ 将禁止用户对 Queue-A 进行读写。

详细步骤如下。

操作 1:在使用用户 A 启动代理后,没有任何测试队列的映射条目

        <plugins>
        <authorizationPlugin>
            <map>
                <authorizationMap>
                    <authorizationEntries>
                        <authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>
                        <authorizationEntry queue="test.queue.A>" read="admins" write="admins" admin="admins"/>                         
                    </authorizationEntries>
                </authorizationMap>
            </map>
        </authorizationPlugin>
    </plugins>

结果1:用户A登录成功但无权访问测试队列

操作 2:然后我修改了授权映射并允许用户 A 在测试队列上读写。即使用户-A 成为“grp_subscribers”的成员

        <plugins>
        <authorizationPlugin>
            <map>
                <authorizationMap>
                    <authorizationEntries>
                        <authorizationEntry topic="ActiveMQ.Advisory.>" read="grp_subscribers, admins" write="grp_subscribers, admins" admin="grp_subscribers, admins"/>
                        <authorizationEntry queue="test.queue.A>" read="grp_subscribers" write="grp_subscribers" admin="grp_subscribers, admins"/>                          
                    </authorizationEntries>
                </authorizationMap>
            </map>
        </authorizationPlugin>
    </plugins>

结果 2:用户 A 登录成功并在测试队列上获得授权

行动 3:然后我通过删除用户 A 对测试队列的访问再次修改了授权映射

        <plugins>
        <authorizationPlugin>
            <map>
                <authorizationMap>
                    <authorizationEntries>
                        <authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>
                        <authorizationEntry queue="test.queue.A>" read="admins" write="admins" admin="admins"/>                         
                    </authorizationEntries>
                </authorizationMap>
            </map>
        </authorizationPlugin>
    </plugins>

结果 3:用户 A 登录成功,并且仍然在测试队列上获得授权,这就是问题所在。用户 A 不应在测试队列上获得授权。

如果我丢失了,我尝试了不同的方法并进行了很多故障排除。我相信我缺少一些东西

4

1 回答 1

0

Activemq AuthorizationMap 使用 checkPeriod 属性进行更新。更改授权角色后,需要刷新消费者/订阅者/生产者连接,可以通过 jmx 停止或启动传输连接器来刷新。

于 2018-01-18T14:37:07.437 回答