使用Grails 3.0.3将springSecurityService注入Controller

时间:2015-08-17 14:46:18

标签: spring spring-security spring-boot grails-3.0

我正在尝试将当前用户放在Grails 3.0.3应用程序中的控制器中。 我使用this repo作为我的安全设置的基础 - 安全性基于GORM。我在build.gradle中使用以下行来包含Spring Security Framework:

compile "org.springframework.boot:spring-boot-starter-security"

但是当我尝试注入springSecurityService时,就像在我的控制器中的其他SO线程(例如参见:this one)中所推荐的那样,我只得到一个null对象。它不是应该发起的。

class RestapiController {
    def springSecurityService

    def currentUser(){
        def user = springSecurityService.currentUser
        render user
    }
}

如何将springSecurityService注入Grails 3.0.3中的控制器?

更新: 最后,我使用以下行来获取当前用户:

SecurityContextHolder.context.authentication.name

1 个答案:

答案 0 :(得分:4)

springSecurityService不属于Spring Security,它位于Grails spring-security-core插件中。 Spring Security没有“当前用户”的概念。您可以访问当前的Authentication并获取用户名,密码,已启用等,但框架中没有任何内容可以让您回到用于填充身份验证的源对象(在Grails + spring-security中) -core这通常是User域类实例) - 必须在您的应用程序代码中完成。

本周末,我发布了该插件的初始版本,该版本适用于Grails 3 3.0.0.M1版本。文档是here。文档中有一个简短的教程可以帮助您入门,您也可以查看this sample app using the plugin in Grails 3