带有 Spring Security 的 Grails 4 审计日志不记录“演员”

Posted

技术标签:

【中文标题】带有 Spring Security 的 Grails 4 审计日志不记录“演员”【英文标题】:Grails 4 Audit Logging w/ Spring Security does not record "Actor" 【发布时间】:2021-12-22 10:44:46 【问题描述】:

我正在使用 Spring Security Rest 和 Grails Audit Logging 插件。正在使用所有正确信息创建审核日志记录,但 actor 属性始终使用 defaultActor 值保存。

以下是我的配置。有没有人有任何想法?我应该寻找什么?提前感谢您的宝贵时间。

build.gradle

ext.springSecurityRestVersion = '3.0.0.RC1'
dependencies 
    ...
    compile "org.grails.plugins:spring-security-rest:$springSecurityRestVersion"
    compile "org.grails.plugins:spring-security-rest-gorm:$springSecurityRestVersion"
    compile 'org.grails.plugins:audit-logging:4.0.3'
    ...

application.yml

grails.plugin.auditLog:
  auditDomainClassName: "us.mycompany.api.AuditLogEvent"
  logFullClassName: false
  defaultActor: "mycompany"

grails.plugin.springsecurity:
  userLookup.userDomainClassName: 'us.mycompany.api.Person'
  userLookup.authorityJoinClassName: 'us.mycompany.api.PersonRole'
  authority.className: 'us.mycompany.api.Role'
  filterChain.chainMap:
    #Stateless chain
    -  pattern: '/**', filters: 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter' 
  rest.token:
    storage.gorm.tokenDomainClassName: 'us.mycompany.api.AuthenticationToken'
    validation:
      useBearerToken: false
      enableAnonymousAccess: true

【问题讨论】:

【参考方案1】:

当我对此进行调试时,似乎SpringSecurityRequestResolver 中的springSecurityService 依赖项为空,因此我必须在resources.groovy 中显式连接SpringSecurityRequestResolver

我知道我不应该这样做,但它确实解决了我的问题,所以这至少是一种解决方法。

resources.groovy

import grails.plugins.orm.auditable.resolvers.SpringSecurityRequestResolver

beans = 
    auditRequestResolver(SpringSecurityRequestResolver) 
        springSecurityService = ref('springSecurityService')
    

【讨论】:

以上是关于带有 Spring Security 的 Grails 4 审计日志不记录“演员”的主要内容,如果未能解决你的问题,请参考以下文章

带有 OpenIDAuthenticationFilter 问题的 Spring Security

带有 spring-boot 和 spring-security 的 JWT

带有 Spring Security 的 Spring REST 不接受凭据

带有 LDAP 注销的 Spring Security 无法删除会话

如何使用带有多个过滤器和 Spring Security 的 Spring DelegatingFilterProxy?

我们如何使用带有 Spring 5.0 的最新 spring-security-oauth2 jar 来实现授权服务器?