Доступ к API безопасности Java в модуле EJB? - PullRequest
0 голосов
/ 05 мая 2018

Я использую 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.

Это ожидаемое поведение?

...