2010-08-22 23 views

回答

4

对于springSecurityService.principal.id因为有对springSecurityService没有依赖注入字段不能工作,所以你需要调用哪些springSecurityService.principal.id电话 - org.springframework.security.core.context.SecurityContextHolder.context.authentication.principal.id

要解决与用户的问题,则需要使用完整的类名包。所以结合起来,这应该是

{com.yourcompany.yourapp.User.get(org.springframework.security.core.context.SecurityContextHolder.context.authentication.principal.id)} 
+0

记录非常感谢您的帮助和非常快的答案。在此期间,我写了一个小插件,为每个控制器添加一个getCurrentUser。然后我使用评估器中的currentUser。它似乎工作 这是一个坏主意? (我对Groovy和Grails都是新手,所以不知道是否添加这种方法是一种反成语) – 2010-08-22 17:31:46

+1

这提醒我Spring安全核心已经添加了一个'getPrincipal()'方法,所以这会缩短对'com.yourcompany.yourapp.User.get(principal.id)'的调用,但最好还有一个'getCurrentUser'方法 - 我将在下一个版本中添加它。 – 2010-08-22 23:01:57

3

我适应Burt's answer,使得它不会抛出一个异常,如果没有人在

grails.commentable.poster.evaluator = { 

    def principal = org.springframework.security.core.context.SecurityContextHolder.context.authentication?.principal 

    if (principal?.hasProperty('id')) { 

     def currentUserId = principal.id 
     if (currentUserId) { 
      com.yourcompany.yourapp.User.get(currentUserId) 
     } 
    } 
} 
+0

谢谢,这也适用于速率插件。 ...但是当没有用户登录时它仍然引发异常。没有[grails.rateable.rater.evaluator]设置定义或评估者没有评估为一个实体 – 10ToedSloth 2012-02-22 10:59:13

+0

@ 10ToedSloth谢谢,我已经修复(4年后) – 2016-03-11 15:50:50