You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails4搭配Audit Logging与Spring Security无法正确记录Actor问题

问题原因及排查项

核心原因

Grails Audit Logging 4.x版本默认的用户身份解析器仅适配传统基于Session的Spring Security认证模式,你使用的无状态Spring Security Rest认证场景下,默认解析器无法正常获取当前登录用户信息,只能 fallback 到你配置的defaultActor值。

具体排查项

  • 先验证认证逻辑有效性:在需要审计的业务接口中手动输出springSecurityService.principal,确认请求携带有效token时可以正常拿到当前登录用户对象,排除Spring Security Rest本身的认证异常。
  • 检查审计日志身份解析器配置:你当前没有配置自定义的auditActorResolver,默认的DefaultAuditActorResolver不支持无状态Rest认证场景,需要自行实现适配逻辑:
    1. 实现AuditActorResolver接口,在getActor()方法中从SecurityContextHolder或当前请求属性中提取登录用户标识
    2. 将自定义实现类注册为Spring Bean,插件会自动优先使用你自定义的解析器
  • 检查过滤器链执行顺序:确认Spring Security Rest的token认证过滤器执行时机早于审计日志的触发逻辑,如果审计日志生成时还未完成token身份认证,自然无法获取到用户信息。
  • 排查匿名访问配置影响:临时将grails.plugin.springsecurity.rest.token.validation.enableAnonymousAccess改为false,测试带有效token的请求是否仍然生成默认actor,排除匿名访问兜底逻辑的影响。
  • 排查异步线程场景:如果你的数据修改操作是在异步子线程中执行的,SecurityContextHolder默认使用ThreadLocal存储认证信息,子线程无法继承父线程的认证上下文,就会使用默认actor。

内容的提问来源于stack exchange,提问作者SGT Grumpy Pants

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:15:07