关于Wildfly的ManagementRealm中的webapp

时间:2015-09-29 14:44:10

标签: wildfly web.xml wildfly-8

我正在编写一个部署在Wildfly上的管理Web应用程序。 它将由有权访问管理控制台(http://localhost:9990/)的相同用户使用。 如果我可以声明我的应用程序应该在ManagementRealm中使用HTTP Basic auth,就像控制台一样。这将是很棒的。

天真,乐观的尝试不起作用:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin Panel</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>ManagementRealm</realm-name>
    </login-config>
</web-app>

这根本不会触发HTTP Basic登录对话框。 有没有简单的方法将我的应用程序插入ManagementRealm?

2 个答案:

答案 0 :(得分:2)

我发现我需要创建一个与ManagementRealm链接的安全域。配置分布在三个地方:

1)需要添加一个新的安全域,使用ManagementRealm登录模块委派给RealmDirect

<subsystem xmlns="urn:jboss:domain:security:1.2">
    <security-domains>
        ....
        <security-domain name="management" cache-type="default">
            <authentication>
                <login-module code="RealmDirect" flag="required">
                    <module-option name="realm" value="ManagementRealm"/>
                </login-module>
            </authentication>
        </security-domain>

这可以通过jboss-cli

完成
/subsystem=security/security-domain=management:add(cache-type=default)
/subsystem=security/security-domain=management/authentication=classic:add(\
    login-modules=[{\
        "code"=>"RealmDirect", "flag"=>"required", \
        "module-options"=>[("realm"=>"ManagementRealm")]\
    }])

2)应用需要使用WEB-INF/jboss-web.xml

来引用此安全域
<jboss-web>
    <security-domain>management</security-domain>
</jboss-web>

3)比直接web.xml打开HTTP Basic登录对话框:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <security-role>
        <role-name>*</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin Panel</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>[message show in login dialog]</realm-name>
    </login-config>
</web-app>

答案 1 :(得分:0)

Wildfly不会遵循安全约束,除非您将其绑定到安全角色:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin Panel</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>ManagementRealm</realm-name>
    </login-config>

    <security-role>
        <role-name>*</role-name>
    </security-role>
</web-app>

这将进行基本的auth加载,但是您遇到的问题是ManagementRealm仅绑定到standalone.xml中的管理端口,因此您必须更改它。您可能需要删除ApplicationRealm以使其不会发生冲突。

    <management-interfaces>
        <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
            <socket-binding http="management-http"/>
        </http-interface>
    </management-interfaces>