使用 Grails 3.0.3 将 springSecurityService 注入控制器

Injecting springSecurityService into Controller with Grails 3.0.3

我试图让当前用户进入 Grails 3.0.3 应用程序的控制器。 我使用 this 存储库作为我的安全设置的基础——安全是基于 GORM 的。我在 build.gradle 中使用以下行以包含 Spring 安全框架:

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

但是当我尝试像在其他 SO 线程中推荐的那样在我的控制器中注入 springSecurityService(例如:this one)时,我只得到一个空对象。它没有像它应该的那样启动。

class RestapiController {
    def springSecurityService

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

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

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

SecurityContextHolder.context.authentication.name

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

本周末我发布了与 Grails 3 一起使用的插件的初始版本,版本 3.0.0.M1。文档是 here. There's a short tutorial in the docs to help get you started, and you might also check out this sample app using the plugin in Grails 3.