【问题标题】:webapp in ManagementRealm on WildflyWildfly 上 ManagementRealm 中的 webapp
【发布时间】:2015-12-27 02:41:38
【问题描述】:

我正在编写一个要部署在 Wildfly 上的管理 web 应用程序。 有权访问管理控制台 (http://localhost:9990/) 的用户将使用它。 如果我可以像控制台一样声明我的应用应该在 ManagementRealm 中使用 HTTP 基本身份验证,那就太好了。

天真的、乐观的尝试没有奏效:

<?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?

【问题讨论】:

    标签: wildfly web.xml wildfly-8


    【解决方案1】:

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

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

    <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>
    

    【讨论】:

    • 谢谢@rzymek,我正在寻找如何与管理领域挂钩,您发现了如何
    【解决方案2】:

    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>
    

    这将加载基本的身份验证,但是您会遇到 ManagementRealm 仅绑定到 Standalone.xml 中的管理端口的问题,因此您必须更改它。您可能需要删除 ApplicationRealm 以免发生冲突。

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

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多