Wildfly安全子系统:从旧版迁移到Elytron,未找到安全域

时间:2019-01-17 10:28:31

标签: java jboss wildfly elytron

我正在尝试将项目从使用旧版安全性迁移到使用Elytron Security。

直到现在(旧版),身份验证正常工作所需要做的就是在子系统->安全中使用正确的名称(“ referencesApplicationDomain ”)创建一个安全域。

我的web.xml:

<web-app ..>
    ...
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>referencesApplicationDomain</realm-name>
    </login-config>
    <security-role>
        <role-name>authenticated</role-name>
    </security-role>
    <security-role>
        <role-name>anonymous</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            ....
        </web-resource-collection>
    </security-constraint>
        <auth-constraint>
            <role-name>authenticated</role-name>
        </auth-constraint>
    </security-constraint>
...
</web-app>

我的jboss-web.xml:

<jboss-web ...>
    <deny-uncovered-http-methods>false</deny-uncovered-http-methods>
    <context-root>/references</context-root>
    <security-domain>referencesApplicationDomain</security-domain>
</jboss-web>

当然,我们的想法是仅使我们的应用程序与Elytron一起使用。

但是,问题是,我看不到在Elytron中创建安全域的位置。

我跟随Wildfly Elytron Documentation使用jboss-cli创建了安全域以及http工厂。

当我签入jboss-cli时,我看到安全域已创建。

但是,当我尝试启动Wildfly服务器时,出现以下错误:

"WFLYCTL0412: Required services that are not installed:" => [
        "jboss.security.security-domain.referencesApplicationDomain"
    ],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "jboss.deployment.unit.\"references-war-1.0.11-SNAPSHOT.war\".component.BranchService.CREATE is missing [jboss.security.security-domain.java:/jaas/referencesApplicationDomain]"
    ]

似乎jboss试图在旧的安全子系统而不是Elytron中找到安全域。但是我不明白为什么?

小注释:我想使用ApplicaationRealm,以使用jboss配置文件中的用户和组。

1 个答案:

答案 0 :(得分:0)

因此,似乎再次写下了我的问题,使我自己解决了这个问题。

结果是Elytron不需要的(实际上,这仅适用于Legacy)。因此,解决方案只是从xml文件中删除这些文件:

web.xml

<web-app ..>
    ...
    <login-config>
        <auth-method>BASIC</auth-method>
        <!--<realm-name>referencesApplicationDomain</realm-name>-->
    </login-config>
</web-app>

jboss-web.xml:

<jboss-web ...>
    <deny-uncovered-http-methods>false</deny-uncovered-http-methods>
    <context-root>/references</context-root>
    <!--<security-domain>referencesApplicationDomain</security-domain>-->
</jboss-web>

之所以可行,是因为默认情况下,Wildlfly的秘密系统使用ApplicationRealm作为默认安全域。 您可以通过查看standalone.xml来进行验证。