我正在构建一个需要调用JBoss 4托管的远程EJB 3.0的应用程序,我需要将Principal从WebSphere传播到JBoss。我编写了一个自定义登录模块和一个自定义Principal,并在WebSphere中注册了它们。
从WAS环境中的任何层(Web或EJB层),我可以使用LoginModule恢复已经过身份验证的主体,因此从WebSphere我可以做到:
Principal principal = context.getCallerPrincipal(); String name = principal.getName(); ....
这将正确返回经过身份验证的主体和它的prorperties。
我也可以从WebSphere成功访问JBoss中托管的远程EJB,但在这种情况下的问题是,每当我尝试从JBoss中调用Principal时调用getCallerPrincipal(),JBoss容器都会出现异常:
[10/2/12 12:56:37:594 BRT] 0000007f BusinessExcep E CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "remoteJBossEJBCall" on bean "BeanId(JBossRemoteEJBCall#ejbModule.jar#WAS_EJB, null)". Exception data: javax.ejb.EJBException: java.lang.IllegalStateException: No valid security context for the caller identity; nested exception is: java.lang.IllegalStateException: No valid security context for the caller identity
...
我已经将WebSphere Global Security设置为传播安全属性,但这也无法解决问题:
如果您有任何想法,请告诉我。我已经坚持了将近2天。
我已完成以下所有步骤:
但仍然无效。
如果您需要,我可以向您发送代码和更多详细信息。
感谢。