【发布时间】: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