ActiveMQ - 授权 - 撤销角色不更新运行时 - 用户能够访问撤销角色的队列

时间:2018-01-16 10:34:49

标签: authorization jms activemq reloadable

我正在使用以下配置(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对Queue-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在测试队列上进行读写。即成为“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不应在测试队列上获得授权。

我尝试了不同的方法,如果我失踪了,我会做很多故障排除。我相信有一些我不想要的东西

1 个答案:

答案 0 :(得分:0)

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