使用Grails 3.0.3将springSecurityService注入控制器

使用Grails 3.0.3将springSecurityService注入控制器,spring,spring-security,spring-boot,grails-3.0,Spring,Spring Security,Spring Boot,Grails 3.0,我试图让当前用户进入Grails3.0.3应用程序中的控制器。 我已经使用回购作为我的安全设置的基础-安全是基于GORM的。为了包含Spring Security Framework,我在build.gradle中使用了以下行: compile "org.springframework.boot:spring-boot-starter-security" 但是,当我尝试在控制器中注入springSecurityService时,就像在其他SO线程中建议的那样(参见示例:),我只得到一个null

我试图让当前用户进入Grails3.0.3应用程序中的控制器。 我已经使用回购作为我的安全设置的基础-安全是基于GORM的。为了包含Spring Security Framework,我在build.gradle中使用了以下行:

compile "org.springframework.boot:spring-boot-starter-security"
但是,当我尝试在控制器中注入springSecurityService时,就像在其他SO线程中建议的那样(参见示例:),我只得到一个null对象。它不是像它应该的那样开始的

class RestapiController {
    def springSecurityService

    def currentUser(){
        def user = springSecurityService.currentUser
        render user
    }
}
如何将springSecurityService注入Grails3.0.3中的控制器

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

SecurityContextHolder.context.authentication.name

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


这个周末,我发布了与Grails3一起工作的插件的初始版本,版本3.0.0.M1。文件是。文档中有一个简短的教程可以帮助您入门,您也可以查看。

另外请注意,如果您只需要在控制器中使用它,您可以跳过注入
springSecurityService
,并使用注入到所有控制器中的(或analagous
authenticatedUser
属性)。谢谢Burt!我还添加了一个更新,使用了我在最后使用的代码来获取当前用户的名称。这是非常不同的
springSecurityService.currentUser
从数据库检索域类实例,并且仅当您需要从
身份验证
无法获得的域类数据时才应使用。如果您只需要用户名,那么您的代码就可以了,更简洁的选项是
springSecurityService.principal.username
。如果无法注入依赖项
springSecurityService
,则会出现故障。当然,这是假设您使用的是SpringSecurity核心插件——如果您使用的是SpringBootStarter,那么是的,您必须在应用程序中做更多的工作。