Я использую Wildfly (последняя версия), и у меня есть 3 модуля (2x .WAR и 1x EJB .JAR). Я использую Soteria (Java Security API) для двух войн. Их пом выглядит так:
<dependency>
<groupId>org.glassfish.soteria</groupId>
<artifactId>javax.security.enterprise</artifactId>
<version>1.0</version>
</dependency>
Для каждой из войн я определил свои собственные механизмы аутентификации, IdentityStores и CallerPrincipals (UserPrincipal и EmployeePrincipal). Реализация в основном скопирована с Soteria GitHub. Все это прекрасно работает, когда каждый из них рассматривается отдельно.
Проблема в том, что когда я хочу получить CallerPrincipal в модуле EJB, у меня нет доступа к CallerPrincipals в войнах, и единственный способ, которым я могу даже получить доступ к Принципалам, - через SessionContext, например:
sessionContext.getCallerPrincipal(); // Has only .getName()
Но я бы хотел использовать это так:
(UserPrincipal) sessionContext.getCallerPrincipal(); // Has my entity as defined in UserPrincipal
Когда я пытаюсь переместить CallerPrincipals в модуль EJB, я получаю эту ошибку:
Unsatisfied dependencies for type IdentityStore with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private
com.trivia.api.security.authentication.ClientBasicAuthenticationMechanism.identityStore
Я подозреваю, что это потому, что IdentityStore не может найти свой CallerPrincipal.
Это ожидаемое поведение?