Мы планируем перейти с Picketbox на Elytron и столкнемся со следующей проблемой:
С Picketbox пользовательский модуль входа в систему может использовать функциональность (или даже может находиться в) модуля развертывания (например, EAR в wildfly / standalone / deployments) для реализации аутентификации на стороне сервера:
<subsystem xmlns="urn:jboss:domain:security:2.0">
<security-domains>
...
<security-domain name="MyDomain" cache-type="default">
<authentication>
<login-module name="MyLoginModule" code="de.example.wildfly.MyLoginModule" flag="required" module="deployment.de.example.wildfly.login"/>
</authentication>
</security-domain>
Моей первой попыткой было использование пользовательского царства в Elytron. Но, насколько я понимаю, пользовательская область должна быть «статическим» модулем (то есть она находится в wildfly / modules / ...) и поэтому не может получить доступ к «динамически» развернутым модулям (см. https://developer.jboss.org/message/984198#984198).
<subsystem xmlns="urn:wildfly:elytron:7.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
...
<security-domains>
<security-domain name="MyDomain" default-realm="MyRealm" permission-mapper="default-permission-mapper">
<realm name="MyRealm" role-decoder="from-roles-attribute" />
</security-domain>
</security-domains>
<security-realms>
...
<custom-realm name="MyRealm" module="de.example.wildfly.login" class-name="de.example.wildfly.MyCustomRealm" />
(я пропустил еще несколько настроек домена безопасности)
Когда я пытаюсь загрузить контекст Spring (который находится в EAR для доступа к некоторым пользовательским классам из EAR) в MyCustomRealm, я получаю следующую ошибку:
org.springframework.beans.factory.access.BootstrapException: Unable to initialize group definition. Group resource name [classpath:applicationContext-appServerBase.xml], factory key [applicationContextEjb]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext-appServerBase.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext-appServerBase.xml] cannot be opened because it does not exist
Что неудивительно, потому что моя сфера не зависит от уха или какой-либо банки оттуда, где находится контекст приложения.
Как настроить аутентификацию (особенно для вызовов EJB) на стороне сервера, используя классы из модуля развертывания (EAR) в Elytron?