【问题标题】:Grails springSecurityService in resources.groovy gives null current userresources.groovy 中的 Grails springSecurityService 将当前用户设为空
【发布时间】:2015-11-30 12:21:44
【问题描述】:

我正在使用 Grails 2.4.3 和 grails-app/conf/spring/resources.groovy,

beans = {
    someBean(com.domain.SomeBeanImpl) {
        springSecurityService = ref('springSecurityService')
    }
}

但是在SomeBeanImpl类里面,

class SomeBeanImpl {
    def springSecurityService

    def method() {
        def user = springSecurityService.currentUser  //null, even after successful log-in
    }
}

在我的控制器和服务中,我通常可以检索到springSecurityService.currentUser

为什么自定义 bean 上是 null?如何正确找回?

已编辑:

我从http://multi-tenant.github.io/grails-multi-tenant-single-db/docs/v0.8.3/guide/4.%20Scripts.html#4.2.%20mt-spring-security使用grails mt-spring-security

并在此类中使用 springSecurityService bean,

/**
 * Spring Security Tenant Resolver
 * Extracts the tenantId
 * @see http://multi-tenant.github.com/grails-multi-tenant-single-db/
 */
@Log4j
class SpringSecurityTenantResolver implements TenantResolver {
    def springSecurityService

    Integer resolve(HttpServletRequest request) throws TenantResolveException {
        def user = springSecurityService.currentUser
/*

        if (!user) {
            throw new TenantResolveException('Tenant could not be resolved using SpringSecurity')
        }
*/

        log.debug "${request.requestURL} : ${user?.username} : ${user?.tenantId}"
        return user?.tenantId
    }

}

【问题讨论】:

  • 这个bean是怎么用的?它是在网络请求期间调用的吗?如果没有,则不会有经过身份验证的用户。

标签: grails spring-security spring-bean


【解决方案1】:

尝试将bean.autowire = 'byName' 添加到 bean 定义中

【讨论】:

  • bean 被正确注入,但它从方法调用返回 null。自动装配不相关。
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 2015-12-28
  • 2023-03-25
  • 2013-03-27
  • 2015-11-10
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多