javax.ejb.EJBAccessException: WFLYSEC0027: недопустимый пользователь при вызове EJB из другого домена безопасности - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть приложение JEE 7, развернутое на Wildfly 10 в виде EAR с библиотекой EJB.Мои EJB-компоненты защищены доменом безопасности с пользовательским модулем входа в систему.Моя проблема в том, что из моего CustomLoginModule мне нужен доступ к EJB (UserRoleCacheManagerBean) для выполнения некоторых задач.Я хотел бы, чтобы этот UserRoleCacheManagerBean был незащищенным, однако, согласно документам Wildfly, любой Боб, явно не защищенный в домене безопасности, по умолчанию будет «другим» доменом безопасности.

Если я добавлю его в тот же домен безопасности, то я рискую бесконечным циклом, в котором мой UserRoleCacheManagerBean должен быть аутентифицирован с моим CustomLoginModule, который, в свою очередь, вызывает UserRoleCacheManagerBean, который должен аутентифицироватьсяс UserRoleCacheManagerBean, ....

Я пытался добавить @PermitAll к UserRoleCacheManagerBean, но безрезультатно.Я все еще получаю ошибку недопустимого пользователя.Поэтому я также попытался определить «анонимный» домен безопасности специально для этого компонента (и сопоставить его с org.jboss.security.auth.spi.AnonLoginModule, чтобы он автоматически проходил аутентификацию), но это тоже не помогло.Во всех случаях я получаю следующее сообщение об ошибке:

15:13:08,069 ERROR [io.undertow.request] (default task-22) UT005023: Exception handling request to /app/: javax.ejb.EJBAccessException: WFLYSEC0027: Invalid User
        at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:69)
        at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:49)
        at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:97)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
        at org.sso.keycloak.KeycloakSecurityInterceptor.aroundInvoke(KeycloakSecurityInterceptor.java:112)
        at sun.reflect.GeneratedMethodAccessor265.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.jboss.as.ejb3.component.ContainerInterceptorMethodInterceptorFactory$ContainerInterceptorMethodInterceptor.processInvocation(ContainerInterceptorMethodInterceptorFactory.java:91)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:57)
        at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:66)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:632)
        at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
        at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:198)
        at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
        at business.caching.UserRolesCacheManager$$$view18.getUserRoles(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor581.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:433)
        at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:128)
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56)
        at org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:67)
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
        at business.caching.UserRolesCacheManager$775179225$Proxy$_$$_Weld$EnterpriseProxy$.getUserRoles(Unknown Source)
        at business.ejb3.LoginManagerBean.getUserRoles(LoginManagerBean.java:192)
        at sun.reflect.GeneratedMethodAccessor396.invoke(Unknown Source)

Возможно, я не могу вызвать EJB в одном домене безопасности из другого EJB в другом домене безопасности.

Как я могу указать, что я не хочу никакой безопасности на этом Бине?Или, если не считать этого, как я могу вызвать EJB из другого домена безопасности?

...