2015-09-29 2 views
1

Я пишу администрацию webapp для развертывания на Wildfly. Он будет использоваться теми же пользователями, которые имеют доступ к Консоли администрирования (http://localhost:9990/). Было бы здорово, если бы я мог просто объявить, что мое приложение должно использовать HTTP Basic auth в ManagementRealm, как это делает консоль.webapp in ManagementRealm on 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" 
     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 на всех. Есть ли простой способ подключить мое приложение к ManagementRealm?

ответ

1

я обнаружил, что мне нужно создать домен безопасности, который связан с 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:

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

Это сделает основную нагрузку аутентификации, но тогда у вас есть проблема, где ManagementRealm только привязан к портам управления в вашем standalone.xml, так что вам придется это изменить. Возможно, вам придется удалить ApplicationRealm, чтобы он не конфликтует.

<management-interfaces> 
     <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true"> 
      <socket-binding http="management-http"/> 
     </http-interface> 
    </management-interfaces> 
Смежные вопросы