1

我正在构建一个需要调用托管在 JBoss 4 上的远程 EJB 3.0 的应用程序,并且我需要将 Principal 从 WebSphere 传播到 JBoss。我编写了一个自定义登录模块和一个自定义主体,并将它们注册到 WebSphere。

从 WAS 环境中的任何层(Web 或 EJB 层),我可以恢复使用 LoginModule 进行身份验证的主体,因此我可以从 WebSphere 执行以下操作:

Principal principal = context.getCallerPrincipal();
String name = principal.getName(); ....

这将正确返回经过身份验证的主体及其属性。

我还可以从 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 来传播安全属性,但这也没有解决问题:

WebSphere 出站安全传播

我已经完成了记录在以下位置的所有步骤:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/topic/com.ibm.websphere.nd.multiplatform.doc/ae/tsec_enablesecattprop.html

但仍然无法正常工作。

4

0 回答 0