Piotr Zakrzewski
Piotr Zakrzewski

Reputation: 3891

Injecting springSecurityService into Controller with Grails 3.0.3

I am trying to get current user inside a controller in a Grails 3.0.3 application. I have used this repo as a base for my security setup - security is GORM based. I am using following line in build.gradle in order to include Spring Security Framework:

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

but when I try to inject springSecurityService like it was recommended in other SO threads (see for example: this one) in my controller, I get only a null object. It is not initiated like it should be.

class RestapiController {
    def springSecurityService

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

How can I inject springSecurityService into a controller in Grails 3.0.3?

UPDATE: In the end I used following line to get the current user:

SecurityContextHolder.context.authentication.name

Upvotes: 3

Views: 2101

Answers (1)

Burt Beckwith
Burt Beckwith

Reputation: 75671

springSecurityService isn't part of Spring Security, it's in the Grails spring-security-core plugin. Spring Security doesn't have the concept of the "current user". You can access the current Authentication and get the username, password, enabled, etc., but there's nothing in the framework that gets you back to the source object that was used to populate the authentication (in Grails + spring-security-core this is often a User domain class instance) - that would have to be done in your application code.

This weekend I released an initial version of the plugin that works with Grails 3, version 3.0.0.M1. The documentation is 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.

Upvotes: 4

Related Questions