使用 configDropins 覆盖应用程序绑定安全角色

Override application-bnd security-role using configDropins

我有一个基于 websphere liberty 的应用程序的 docker 图片。默认情况下,此图像使用具有几个示例用户的 basicRegistry 的基本身份验证。 然后将 basicRegistry 组绑定到一个安全角色,如下所示(这个安全角色是从应用程序的 web.xml 中引用的):

<webApplication id="myWebapp" ...>
    <application-bnd>
        <security-role name="Users">
            <group name="Users"/>
        </security-role>
    </application-bnd>
</webApplication>

现在,在我的环境中,身份验证将在此容器之外处理,因此我想禁用基本的身份验证检查,并向所有可以访问它的人开放。 与其重新打包整个 server.xml,我希望只向 configDropins/override 添加一些配置以禁用 webapp 的身份验证。

尝试之后,我很困惑 whether/how 这应该有效... 这是观察到的行为:

如果我先启动服务器,然后将配置片段添加到 configDropins/override,如下所示:

<webApplication id="myWebapp">
    <application-bnd>
        <security-role name="Users">
            <special-subject type="EVERYONE"/>
        </security-role>
    </application-bnd>
</webApplication>

然后 webapp 将重新加载并关闭基本身份验证(好)。

但是,当我在 configDropins/override 和 然后 中打包相同的配置片段并启动服务器时,webapp 在启用基本身份验证的情况下启动,并且所有请求都失败并显示HTTP 401 状态。

任何人都可以帮助我理解这种行为and/or提供替代方法吗?

向 security-role 元素添加 "id" 属性应该可以解决此问题。在您的示例中,配置处理后基本上有两个 security-role 元素。安全运行时将根据名称将它们合并在一起,但行为将根据接收到两个安全角色元素的顺序而有所不同。