
WebLogic 12c 环境中将 JDK 从 1.8.0_301 升级至 1.8.0_361 后,应用端(如 GET_USER_INFO 服务)无法加载 WebLogic 安全域中配置的自定义角色与群组,仅显示内置基础角色;而管理控制台中角色配置完好,降级 JDK 后功能立即恢复。
weblogic 12c 环境中将 jdk 从 1.8.0_301 升级至 1.8.0_361 后,应用端(如 `get_user_info` 服务)无法加载 weblogic 安全域中配置的自定义角色与群组,仅显示内置基础角色;而管理控制台中角色配置完好,降级 jdk 后功能立即恢复。
该问题并非配置错误或权限遗漏,而是 Oracle 官方确认的 JDK 补丁兼容性缺陷。根据 Oracle 支持文档 Doc ID 2865542.1(After Upgrading JDK In WCC Environment, WCC Users Lost Roles),JDK 1.8.0_361(及部分后续更新)引入了对 JAAS Subject 和 Principal 处理逻辑的变更,导致 WebLogic 12.2.1.x 在调用 SecurityServiceManager 获取用户授权信息时,未能正确解析自定义 RealmRoleMapper 或 GroupMembership 关联的角色映射,从而在 GET_USER_INFO 等 UCM/IDC 服务响应中遗漏自定义角色字段。
根本原因与影响范围
- 触发条件:仅影响 WebLogic Server 12.2.1.x(含 12c) + JDK 8u361 及部分高版本补丁(如 8u371、8u381 的早期子版本)组合;
- 机制失效点:weblogic.security.service.SecurityServiceManager 在构建 Subject 对象时,跳过了 RealmRoleMapper 的 getRoles() 调用链,导致 Principal 集合中缺失 WLSUserImpl 关联的自定义 RealmRoleImpl 实例;
-
表现特征:IdcService=GET_USER_INFO 返回的 XML 中
元素仅含 Admin, Anonymous, Authenticated 等内置角色,但 console 中 Security Realms > myrealm > Roles and Policies > Roles 页面仍可正常查看并编辑所有自定义角色。
推荐解决方案(按优先级排序)
✅ 方案一:升级至 Oracle 认证兼容版本(首选)
Oracle 已在 JDK 8u391(2023年10月发布)及 WebLogic 12.2.1.4.0 PSU(Patch Set Update)中修复该问题。建议同步升级:
# 检查当前 WebLogic PSU 版本 $MW_HOME/wlserver/server/bin/setWLSEnv.sh && java weblogic.version # 下载并安装最新 PSU(如 WLS 12.2.1.4.0 with PSU 2023-Q4) # 参考:https://www.oracle.com/middleware/technologies/weblogic-server-downloads.html
✅ 方案二:临时规避 — 强制启用旧版 Principal 解析(需修改启动参数)
在 setDomainEnv.sh(Linux)或 setDomainEnv.cmd(Windows)中,向 JAVA_OPTIONS 添加以下 JVM 参数:
-Dweblogic.security.subject.principal.class=weblogic.security.principal.WLSUserImpl \ -Dweblogic.security.subject.principal.cache=false
⚠️ 注意:此参数仅适用于 JDK 8u361–8u381 区间,且需重启 Admin Server 与所有 Managed Servers 生效。
❌ 不推荐方案:回退 JDK
虽可立即恢复功能,但会引入已知安全漏洞(如 CVE-2022-21618、CVE-2023-21935),违反企业安全基线要求,仅作为紧急临时措施。
验证修复效果
部署修复后,通过以下方式验证自定义角色是否正常返回:
POST /idc/idcplg HTTP/1.1 Host: your-wls-host:port Content-Type: application/x-www-form-urlencoded IdcService=GET_USER_INFO&user=your_test_user&IsJava=1
检查响应中是否包含类似:
<role name="CustomEditor"></role><role name="ContentApprover"></role><role name="DepartmentAdmin"></role>
总结
JDK 升级引发的 WebLogic 自定义角色丢失,本质是底层 JAAS 主体处理逻辑变更与 WebLogic 安全服务耦合过紧所致。务必避免“仅升级 JDK 不验证中间件兼容性”的运维操作。生产环境升级前,应严格参照 Oracle Fusion Middleware Supported System Configurations 查询 JDK + WLS 组合的官方认证状态,并在预发环境完成 GET_USER_INFO、GET_ROLE_INFO 等核心安全服务的全链路回归测试。










