Skip to content

fix(security): 基于 dev 启用两端方法授权并补充 HTTP 回归 - #158

Draft
jeequan wants to merge 1 commit into
devfrom
fix/method-security-dev-20261028
Draft

jeequan wants to merge 1 commit into
devfrom
fix/method-security-dev-20261028

Conversation

@jeequan

@jeequan jeequan commented Oct 28, 2026

Copy link
Copy Markdown
Owner

问题与验收标准

感谢 @rwzdk 在 #156 中发现并提出方法安全配置问题。本 PR 基于 dev(3395690d9fbcc46a53a40140689987b56944666a)独立准备最小修复及行为回归,保留原 PR 的发现归属;不修改原贡献分支。

验收标准:两端生产安全配置能够对 Spring 管理的方法执行权限检查;无匹配权限时不调用业务依赖,有匹配权限时正常调用,未登录仍被拒绝。验证只使用无害测试 fixture,不包含真实业务接口复现步骤。

改动与兼容性

  • manager、merchant 的 WebSecurityConfig 各增加 @EnableMethodSecurity(prePostEnabled = true) 及对应 import。生产代码共增加 4 行。
  • 两端新增 MethodSecurityHttpTest,加载真实安全配置、FilterChainProxy、Spring MVC 和 BizExceptionResolver,通过 MockMvc 请求 Spring 管理的 fixture;没有在测试配置中另行启用方法安全,也不是直接调用 Controller 或只反射检查注解。
  • 沿用现有依赖,无 POM、数据库结构、签名、支付网关或前端变更。
  • 保留现有响应契约:方法权限拒绝经 BizExceptionResolver 返回 HTTP 200 + 业务码 5004;未登录由认证入口返回 HTTP 401。这里不将方法拒绝改成 HTTP 403。
  • 启用后,未配置/已停用的权限或不完整的缓存权限可能使原有账号访问被拒绝。部署前需核对实际权限数据;本 PR 不做部署或缓存操作。回滚配置会重新失去这层方法授权,不能当作常规兼容性解决方案。

验证

环境:JDK 17、Maven 3.9.11。

  • 修复前,相同测试:两端各 7 例,其中各 3 个预期失败;失败断言明确发现无匹配权限时 mock 业务被调用。
  • 修复后专项:14/14 通过。覆盖无权限/不匹配权限时业务调用为零,正确单权限及 hasAnyAuthority 任一匹配时恰调用一次,匿名请求 401。
  • 分组回归:51 例通过;随后执行未排除任何测试类的标准全量 clean test:15 个测试类、62 例全部通过,0 失败、0 错误、0 跳过,10 个 reactor 模块成功。完整结果包含另外 11 个既有商户配置 Mockito 回归。
  • docs/install/test_*.sh 三项断言及安装/卸载脚本 bash -n 检查通过;补丁与空白检查通过。
# 专项(-am 包含依赖模块)
mvn -B -pl jeepay-manager,jeepay-merchant -am \
  -Dtest=MethodSecurityHttpTest -Dsurefire.failIfNoSpecifiedTests=false test

# 完整重编译和全部测试,不排除测试类
mvn -B -fae clean test

for t in docs/install/test_*.sh; do sh "$t" || exit 1; done
bash -n docs/install/install.sh
bash -n docs/install/uninstall.sh

本地实际 Maven 执行另外使用 -o、独立依赖缓存,并通过 -DargLine=-javaagent:<本地缓存>/net/bytebuddy/byte-buddy-agent/1.14.19/byte-buddy-agent-1.14.19.jar 在测试 JVM 启动时加载 agent,以适配不支持 Mockito 自附加的容器;没有修改仓库依赖或 CI 流程。

未验证:fixture 认证通过请求属性上下文注入,不覆盖真实 JWT 解析、登录/令牌缓存生命周期、实际角色权限矩阵、真实业务端点或完整部署启动。没有连接真实数据库、Redis、MQ 或支付渠道;测试通过不代表真实支付或部署验收完成。远端 CI 结果以本 PR 当前 head 的检查为准。

合并前核对

  • 普通贡献目标为 dev
  • 最小改动范围及响应兼容性已说明
  • 本地相关及全量测试通过,未提交凭据、真实商户数据或敏感日志
  • 维护者评审意见已处理,必需远端 CI 检查通过

本 PR 保持草稿,供评审;不是发布 PR。

感谢 @rwzdk 在 #156 中指出方法安全未启用的问题。本次基于 dev 独立实现最小配置修复,并验证真实过滤器链、Spring 方法代理及既有权限错误响应。

完整 clean test: 62 tests passed; 无真实业务端点、数据库或支付渠道访问。
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