我试图在Spring Security中使用可评论的插件。Grails:使用Spring Security插件可评论的用户评估程序
我不能设法写正确
grails.commentable.poster.evaluator
我试过{User.get(springSecurityService.principal.id)}, 但是从CommentController,无论是用户和springSecurity似乎无法访问。
我该怎么办?
我试图在Spring Security中使用可评论的插件。Grails:使用Spring Security插件可评论的用户评估程序
我不能设法写正确
grails.commentable.poster.evaluator
我试过{User.get(springSecurityService.principal.id)}, 但是从CommentController,无论是用户和springSecurity似乎无法访问。
我该怎么办?
对于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)}
我适应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)
}
}
}
谢谢,这也适用于速率插件。 ...但是当没有用户登录时它仍然引发异常。没有[grails.rateable.rater.evaluator]设置定义或评估者没有评估为一个实体 – 10ToedSloth 2012-02-22 10:59:13
@ 10ToedSloth谢谢,我已经修复(4年后) – 2016-03-11 15:50:50
记录非常感谢您的帮助和非常快的答案。在此期间,我写了一个小插件,为每个控制器添加一个getCurrentUser。然后我使用评估器中的currentUser。它似乎工作 这是一个坏主意? (我对Groovy和Grails都是新手,所以不知道是否添加这种方法是一种反成语) – 2010-08-22 17:31:46
这提醒我Spring安全核心已经添加了一个'getPrincipal()'方法,所以这会缩短对'com.yourcompany.yourapp.User.get(principal.id)'的调用,但最好还有一个'getCurrentUser'方法 - 我将在下一个版本中添加它。 – 2010-08-22 23:01:57