AOP 统一日志打印链路

AOP 统一日志打印链路 A sequence diagram generated by Archify. POST /platform/api/aboss/sso/user-info 调用 loginFacade.userInfo() joinPoint.proceed() userInfoQryExe.execute(query) parserJWT(token) 返回 ACC_ID 等 claims 组装 UserInfoDTO 返回 ResultModel.data JSON.toJSONString(args/result) + log.info 返回 result HTTP response 请求进入与 AOP 拦截 业务执行与返回对象组装 序列化、打印与响应返回 调用方 · HTTP Client · Sequence participant 调用方 HTTP Client Controller · LoginController · Sequence participant Controller LoginController LogAopConfig · @Around 环绕通知 · Sequence participant LogAopConfig @Around 环绕通知 Facade · LoginFacadeImpl · Sequence participant Facade LoginFacadeImpl UserInfo 执行器 · UserInfoQryExe · 组装 DTO · Sequence participant UserInfo 执行器 UserInfoQryExe · 组装 DTO JWT 解析 · parserJWT(token) · Sequence participant JWT 解析 parserJWT(token) Log4j2 · common-default.log · Sequence participant Log4j2 common-default.log Legend request return security default message

为什么能被拦截

  • • LoginFacadeImpl 位于 impl 包并以 Impl 结尾
  • • userInfo 是 public 方法
  • • Spring 注入的是经过 AOP 代理的对象

personNo 的来源

  • • 当前实现从 JWT 的 ACC_ID 取值
  • • UserInfoDTO 被放入 ResultModel.data
  • • 返回对象序列化时递归带出 personNo

日志打印时机

  • • joinPoint.proceed() 先执行真实业务方法
  • • 业务正常返回后才序列化参数和结果
  • • 日志输出后再把原 result 返回给 Controller