2

我有一个 EAR,其中包含一个 WAR。为 EAR(在 jboss-app.xml 内)配置一个基于 JAAS 的安全域,为 WAR(在 jboss-web.xml 内)配置一个基于 JASPIC 的安全域。EAR 包含我想使用 JAAS 保护的 EJB。最近添加了 WAR,以便为我实现了 JASPIC 机制的 EJB 提供 JAX-RS 端点。此设置在 Weblogic 12c 中按预期工作,但在 JBoss EAP 中出现以下错误。

19:59:41,914 ERROR [org.jboss.as.ejb3.invocation] (default task-1) WFLYEJB0034: EJB Invocation failed on component CommonService for method public abstract boolean 
com.abc.xyz.method1(com.abc.xyz.UserVO) throws java.rmi.RemoteException: 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.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.deployment.processors.EjbSuspendInterceptor.processInvocation(EjbSuspendInterceptor.java:44)
        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.ejb3.component.interceptors.EjbExceptionTransformingInterceptorFactories$1.processInvocation(EjbExceptionTransformingInterceptorFactorie
s.java:75)

我认为,即使 JASPIC 身份验证成功,SecurityContextInterceptor 也无法识别它或没有获得正确的主体。此外,调试时出现的一个重要观察结果是,我的 JAAS 登录模块被调用并失败,因为它无法使用凭据。

EAR 中使用的 Jboss 描述符如下所示。

jboss-app.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd">
<jboss-app>
    <security-domain>AppClient</security-domain>
</jboss-app>

jboss-web.xml

<jboss-web version="10.0"
           xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_10_0.xsd">
    <security-domain>jaspitest</security-domain>
</jboss-web>

我已经尝试过在 SAM 中提到的解决方法 @Jaspic 模块没有将主体传播到 JBoss 7.4 中的本地 EJB,但它没有任何区别。非常感谢任何有关调试和修复此问题的帮助。

4

0 回答 0