Я изменяю существующее веб-приложение Java EE 7, чтобы использовать стандартный механизм домена безопасности Java EE для аутентификации в Active Directory. Я начал с создания простого веб-приложения для проверки концепции, чтобы проверить все и заставить конфигурацию Wildfly работать, а затем применил изменения к основному приложению. Сейчас я нахожусь в ситуации, когда тестовое приложение работает, а основное нет.
Как заставить основное приложение правильно работать с доменом безопасности? Как я могу диагностировать эту проблему? Что может помешать процессу безопасности?
Вот моя конфигурация области и домена в standalone.xml:
<security-realms>
<!-- Default realms omitted -->
<security-realm name="ActiveDirectoryRealm">
<authentication>
<ldap connection="MyAD" base-dn="OU=Test Users,OU=AU,DC=company,DC=int">
<username-filter attribute="sAMAccountName"/>
</ldap>
</authentication>
</security-realm>
</security-realms>
<outbound-connections>
<ldap name="MyAD" url="ldap://company.int" search-dn="CN=Wildfly AS,OU=Service Accounts,OU=AU,DC=company,DC=int" search-credential="xxx"/>
</outbound-connections>
<!-- Skip many lines -->
<security-domain name="active-directory" cache-type="default">
<authentication>
<login-module code="Remoting" flag="optional">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="RealmDirect" flag="sufficient">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="realm" value="ActiveDirectoryRealm"/>
</login-module>
</authentication>
</security-domain>
А вот мой файл jboss-web.xml (одинаковый в обоих приложениях):
<jboss-web>
<security-domain>active-directory</security-domain>
</jboss-web>
И, наконец, биты безопасности web.xml (одинаковые в обоих приложениях, за исключением ограниченных шаблонов URL):
<security-constraint>
<web-resource-collection>
<web-resource-name>Unauthenticated Resources</web-resource-name>
<url-pattern>/css/*</url-pattern>
<url-pattern>/font/*</url-pattern>
<url-pattern>/images/*</url-pattern>
<url-pattern>/js/*</url-pattern>
<url-pattern>/lib/*</url-pattern>
<url-pattern>/partials/*</url-pattern>
</web-resource-collection>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>All Resources</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>My Realm</realm-name>
<form-login-config>
<form-login-page>/Login.html</form-login-page>
<form-error-page>/NoAccess.html</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>*</role-name>
</security-role>
Некоторые факты о приложениях:
- Оба приложения используют файл web.xml Servlet 3.1 и упакованы как WAR.
- Оба приложения активируют подсистемы Undertow и EJB, а основное приложение также активирует JPA.
- Я развернул оба приложения в одном и том же экземпляре Wildfly 8.2, работающем на моем локальном компьютере.
- Основное приложение использует Spring (поскольку мы используем Spring-Data и Spring-MVC), а также EJB, в то время как тестовое приложение не использует Spring.
Тестовое приложение работает отлично, но основное приложение всегда не может войти в систему (меня перенаправляют на страницу формы-ошибки). Я включил вход в систему TRACE для org.jboss.security
, но все, что я получаю, когда пытаюсь войти, это:
2015-07-22 13:36:54,903 TRACE [org.jboss.security] (default task-1) PBOX000354: Setting security roles ThreadLocal: null
Для дополнительных странностей я могу установить значение домена безопасности в jboss-web.xml либо на active-directory
, либо на java:/jaas/active-directory
, и оба работают, однако использование префикса в основном приложении приводит к сбою его запуска. Я знаю, что префикс больше не поддерживается в Wildfly 8 но не уверен, почему поведение двух приложений отличается.
Заранее спасибо за любую помощь и предложения, всем очень признателен!