WebLogic 14.1.1.0.0调用10.3.6.0的RMI/EJB兼容性问题求助
问题描述
调用部署在另一台WebLogic服务器上的Remote接口时遇到如下问题:
- 初始错误:
[Security:090398]Invalid Subject: principals=[ - 参考Oracle文档配置两台WebLogic的全局信任后,出现
NoClassDefFoundError:
weblogic.utils.NestedException: java.lang.NoClassDefFoundError: com/org/DataType weblogic.rjvm.RJVMImpl.gotExceptionReceiving(RJVMImpl.java:1269) weblogic.rjvm.ConnectionManager.gotExceptionReceiving(ConnectionManager.java:1238) weblogic.rjvm.MsgAbbrevJVMConnection.gotExceptionReceiving(MsgAbbrevJVMConnection.java:629) weblogic.rjvm.t3.MuxableSocketT3.hasException(MuxableSocketT3.java:687) weblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:860) weblogic.socket.SocketMuxer.deliverHasException(SocketMuxer.java:794) weblogic.socket.NIOSocketMuxer.process(NIOSocketMuxer.java:606) weblogic.socket.NIOSocketMuxer.processSockets(NIOSocketMuxer.java:563) weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:30) weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43) weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147) weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119) Nested Exception/Error: weblogic.utils.NestedException: java.lang.NoClassDefFoundError: com/org/DataType weblogic.rjvm.RJVMImpl.gotExceptionReceiving(RJVMImpl.java:1266) weblogic.rjvm.ConnectionManager.gotExceptionReceiving(ConnectionManager.java:1238) weblogic.rjvm.MsgAbbrevJVMConnection.gotExceptionReceiving(MsgAbbrevJVMConnection.java:629) weblogic.rjvm.t3.MuxableSocketT3.hasException(MuxableSocketT3.java:687) weblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:860) weblogic.socket.SocketMuxer.deliverHasException(SocketMuxer.java:794) weblogic.socket.NIOSocketMuxer.process(NIOSocketMuxer.java:606) weblogic.socket.NIOSocketMuxer.processSockets(NIOSocketMuxer.java:563) weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:30) weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43) weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147) weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119)
- 排查确认是重复类的JAR包导致
NoClassDefFoundError,修复后又再次出现[Security:090398]Invalid Subject: principals=[错误,不清楚缺失哪些配置。
解决方案
针对反复出现的[Security:090398]Invalid Subject错误,结合WebLogic跨服务器调用的信任机制,从以下维度排查修复:
1. 验证全局信任配置的完整性
全局信任需两台服务器配置完全一致,检查以下项:
- 两台WebLogic的
domain_name/config/config.xml中,security-configuration节点的enforce-valid-basic-auth-credentials属性是否设为false(跨服务器信任场景需关闭严格校验) - 确认两台服务器使用相同的信任密钥:在WebLogic控制台
安全领域 > 我的安全领域 > 凭据中,检查system/trust条目下的密码是否一致;或直接对比config.xml中credential-encrypted字段的值 - 检查服务器启动参数是否添加
-Dweblogic.security.allowCryptoJDefaultJCEVerification=true(部分版本需该参数避免密钥校验失败)
2. 检查调用端的身份传递配置
如果调用需要传递身份信息,需确保:
- 调用代码中正确使用
weblogic.security.Security.runAs(),传入目标服务器认可的主体(Principal) - 若使用客户端调用,检查
weblogic.properties或wlclient.jar配置是否包含正确信任信息,比如指定weblogic.security.TrustKeyStore=CustomTrust并配置对应密钥库路径
3. 排查类加载与安全配置的冲突
修复重复JAR包时可能误改类加载顺序或安全相关JAR,需:
- 确认两台服务器的
com/org/DataType类所在JAR包完全一致(版本、签名),避免类版本不一致导致信任校验失败 - 检查WebLogic类加载器优先级:若应用使用自定义类加载器,需确保
weblogic.security.*等安全相关类由系统类加载器加载,而非应用类加载器 - 验证服务器安全策略:在
安全领域 > 我的安全领域 > 权限中,确认weblogic.security.net.ConnectionPermission已授予调用端应用或用户
4. 启用安全日志排查细节
开启WebLogic安全调试日志,获取更详细错误信息:
- 在控制台
服务器 > 目标服务器 > 日志 > 调试中,勾选weblogic.security和weblogic.rjvm的调试选项 - 查看
domain_name/servers/server_name/logs/server_name.log中的安全日志,定位具体哪个主体校验失败或信任环节出错
5. 确认跨服务器网络与端口配置
- 确保两台服务器的T3/T3S端口(默认7001/7002)可正常通信,无防火墙拦截
- 若使用SSL连接,确认两台服务器的SSL证书已互相导入对方的信任密钥库(
trust.jks)
内容的提问来源于stack exchange,提问作者Atif Sheikh
相关产品推荐
相关产品推荐

