Skip to content

fix(树结构): 按对象身份遍历全部节点 - #374

Merged
zhou-hao merged 1 commit into
5.0.xfrom
codex/fix-tree-traversal-identity
Oct 29, 2026
Merged

zhou-hao merged 1 commit into
5.0.xfrom
codex/fix-tree-traversal-identity

Conversation

@zhou-hao

Copy link
Copy Markdown
Member

TreeSupportEntity.forEach 原先把 System.identityHashCode 的数值当作唯一身份。不同对象发生碰撞时,后一个节点及其子树被跳过;消费者用该遍历提取请求树的权限目标时,会遗漏实际将被持久化的节点。

改为 IdentityHashMap 支撑的对象身份集合,只跳过同一对象的重复引用。保留广度优先顺序、循环引用去重、实体 ID 和树结构,不增加接口或配置。

验证

  • JDK 21:TreeUtilsTest、TreeSupportEntityTraversalTest 共 3 项通过,编译和 API 本地安装通过。
  • 同一遍历测试在 -XX:hashCode=2 的 JVM 下通过,并断言测试对象的身份哈希确实相同;覆盖不同对象共享业务 ID、重复引用、循环引用及遍历顺序。
  • 消费者真实 Controller 代理下的身份碰撞越权复现已通过;配套组织集成测试 133 项、组件 246 项、租户 161 项均通过,总计 543 项定向验证。
mvn -o -pl hsweb-commons/hsweb-commons-api \
  '-Dtest=TreeUtilsTest,TreeSupportEntityTraversalTest' -Djacoco.skip=true install
mvn -o -pl hsweb-commons/hsweb-commons-api \
  -Dtest=TreeSupportEntityTraversalTest -Djacoco.skip=true \
  '-DjacocoArgLine=-XX:+UnlockExperimentalVMOptions -XX:hashCode=2 -Dtree.test.constantIdentityHash=true' test

未执行框架全量套件。消费者需使用包含此修复的 hsweb-commons-api:5.0.3-SNAPSHOT 构建。

配套:components #1678、authentication-manager #391。

@zhou-hao
zhou-hao merged commit b83a3ff into 5.0.x Oct 29, 2026
1 check passed
@zhou-hao
zhou-hao deleted the codex/fix-tree-traversal-identity branch October 29, 2026 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant