Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从另一个使用KeyClope保护的wildfly实例调用远程EJB_Java_Security_Ejb 3.0_Java Ee 7_Keycloak - Fatal编程技术网

Java 无法从另一个使用KeyClope保护的wildfly实例调用远程EJB

Java 无法从另一个使用KeyClope保护的wildfly实例调用远程EJB,java,security,ejb-3.0,java-ee-7,keycloak,Java,Security,Ejb 3.0,Java Ee 7,Keycloak,调用部署在同一台机器上运行的另一个Wildfly实例上的远程EJB时,我遇到了一个问题。我已经按照链接设置了EJB调用。我在不同的服务器实例上部署了两个应用程序(都使用KeyClope进行保护),分别是my-caller.ear和my-callee.ear。结构如下: **my-caller-app.ear** | |-----lib |-----META-INF |-----jboss-ejb-client.xml |-----jboss-app.xml


调用部署在同一台机器上运行的另一个Wildfly实例上的远程EJB时,我遇到了一个问题。我已经按照链接设置了EJB调用。我在不同的服务器实例上部署了两个应用程序(都使用KeyClope进行保护),分别是my-caller.ear和my-callee.ear。结构如下:

**my-caller-app.ear**
|
|-----lib
|-----META-INF
        |-----jboss-ejb-client.xml
        |-----jboss-app.xml
        |-----application.xml       
|-----my-web.war
        |------ WEB-INF
                |----- beans.xml
                |----- jboss-web.xml [<security-domain>keycloak</security-domain>]
                |----- keycloak.json
                |----- web.xml
|---- my-ejb.jar
        |---- <org.myapp.ejb.*> // EJB classes
        |---- META-INF
                |-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
                |-----persistence.xml


**my-callee-app.ear**
|
|-----lib
|-----META-INF
        |-----jboss-app.xml
        |-----application.xml       
|-----my-web2.war
        |------ WEB-INF
                |----- beans.xml
                |----- jboss-web.xml [<security-domain>keycloak</security-domain>]
                |----- keycloak.json
                |----- web.xml
|---- my-ejb2.jar
        |---- <org.myapp.ejb.*> // EJB classes
        |---- META-INF
                |-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
                |-----persistence.xml
@Resource(lookup="ejb:my-callee-app-0.0.1-SNAPSHOT/my-ejb2/CalleeBean!com.business.CalleeBeanRemote")
    CalleeBeanRemote calleeService;

我对keydepot的standalone.xml配置如下(两台服务器)。另外,默认安全域设置为keydepeat

<default-security-domain value="keycloak"/>
......
......

<security-domain name="keycloak">
    <authentication>
        <login-module code="org.keycloak.adapters.jboss.KeycloakLoginModule" flag="required"/>
    </authentication>
</security-domain>

......
......

每当我尝试调用远程EJB上的任何方法时,它都会在两个服务器实例上引发以下异常:

javax.ejb.EJBAccessException:WFLYSEC0027:无效用户


我在远程服务器(被叫服务器)上启用了跟踪日志记录,如下所示:

**my-caller-app.ear**
|
|-----lib
|-----META-INF
        |-----jboss-ejb-client.xml
        |-----jboss-app.xml
        |-----application.xml       
|-----my-web.war
        |------ WEB-INF
                |----- beans.xml
                |----- jboss-web.xml [<security-domain>keycloak</security-domain>]
                |----- keycloak.json
                |----- web.xml
|---- my-ejb.jar
        |---- <org.myapp.ejb.*> // EJB classes
        |---- META-INF
                |-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
                |-----persistence.xml


**my-callee-app.ear**
|
|-----lib
|-----META-INF
        |-----jboss-app.xml
        |-----application.xml       
|-----my-web2.war
        |------ WEB-INF
                |----- beans.xml
                |----- jboss-web.xml [<security-domain>keycloak</security-domain>]
                |----- keycloak.json
                |----- web.xml
|---- my-ejb2.jar
        |---- <org.myapp.ejb.*> // EJB classes
        |---- META-INF
                |-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
                |-----persistence.xml
@Resource(lookup="ejb:my-callee-app-0.0.1-SNAPSHOT/my-ejb2/CalleeBean!com.business.CalleeBeanRemote")
    CalleeBeanRemote calleeService;
2017-07-15 19:54:23867跟踪[org.jboss.security](默认任务-47) PBOX00200:Begin isValid,主体:ejb,缓存项:null 2017-07-15 19:54:23868跟踪[org.jboss.security](默认任务-47)PBOX00209: defaultLogin,主体:ejb 2017-07-15 19:54:23868跟踪 [org.jboss.security](默认任务-47)PBOX00221:开始 getAppConfigurationEntry(Key斗篷),尺寸:6 2017-07-15 19:54:23868 TRACE[org.jboss.security](默认任务-47)PBOX00224:End getAppConfigurationEntry(KeyClope),AuthInfo:AppConfigurationEntry[]: [0]LoginModule类:org.keydove.adapters.jboss.keydove LoginModule ControlFlag:LoginModuleControlFlag:必需的选项:

2017-07-15 19:54:23868调试[org.jboss.security](默认任务-47) PBOX00206:登录失败:javax.security.auth.Login.Login异常: 找不到LoginModule类: org.keydape.adapters.jboss.keydapeloginmodule来自[Module] 来自的“deployment.my-callee-app-0.0.1-SNAPSHOT.ear.my-ejb2.jar:main” 服务模块加载程序]位于 javax.security.auth.login.LoginContext.invoke(LoginContext.java:794) 在 javax.security.auth.login.LoginContext.access$000(LoginContext.java:195) 在 javax.security.auth.login.LoginContext$4.run(LoginContext.java:682) 在 javax.security.auth.login.LoginContext$4.run(LoginContext.java:680) 位于java.security.AccessController.doPrivileged(本机方法) javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 在 javax.security.auth.login.LoginContext.login(LoginContext.java:587) 在 org.jboss.security.authentication.JBossCachedAuthenticationManager.defaultLogin(JBossCachedAuthenticationManager.java:406) 在 org.jboss.security.authentication.JBossCachedAuthenticationManager.proceedWithJaasLogin(JBossCachedAuthenticationManager.java:345) 在 org.jboss.security.authentication.JBossCachedAuthenticationManager.authenticate(JBossCachedAuthenticationManager.java:333) 在 org.jboss.security.authentication.JBossCachedAuthenticationManager.isValid(JBossCachedAuthenticationManager.java:146) 在 org.jboss.as.security.service.SimpleSecurityManager.authenticate(SimpleSecurityManager.java:406) 在 org.jboss.as.security.service.SimpleSecurityManager.authenticate(SimpleSecurityManager.java:367) 在 org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:55) 在 org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:49)


令人惊讶的是,当我在同一台服务器上部署两个应用程序时,它运行得非常好。
我确信这是远程服务器上的一些安全问题,而不是远程处理问题。我认为keydove保护了我的web层,而不是ejb(不确定)。我陷入这个问题已经有相当一段时间了。

任何帮助都将不胜感激。谢谢

您是否也在另一台服务器上安装了KeyClope适配器?@Maddin,我复制了我的wildfly目录以创建另一台服务器。KeyClope适配器在第一台服务器中,所以我假设其他服务器也会有它。。谢谢。你也在另一台服务器上安装了KeyClope适配器吗?@Maddin,我复制了我的wildfly目录来创建另一台服务器。KeyClope适配器在第一台服务器中,所以我假设其他服务器也会有它。。谢谢