Search code examples
grailsspring-security

Spring security core plugin - How to access User id from a controller


An error message occurred when I'm trying to get current login user id from controller.

Error message: Message No signature of method: static grails.plugin.springsecurity.SpringSecurityService.getCurrentUserId() is applicable for argument types: () values: [] Possible solutions: getCurrentUserId(), getCurrentUser()

package com.testapp


import grails.plugin.springsecurity.annotation.Secured
import grails.plugin.springsecurity.SpringSecurityService

@Secured('IS_AUTHENTICATED_FULLY')
class TestController {

def myAction(){
   def user = SpringSecurityService.getCurrentUserId() 
}

Solution

  • The method isn't static, so you need to add a dependency injection for the singleton Spring bean and call it as an instance method on that:

    package com.testapp
    
    import grails.plugin.springsecurity.annotation.Secured
    import grails.plugin.springsecurity.SpringSecurityService
    
    @Secured('IS_AUTHENTICATED_FULLY')
    class TestController {
    
       SpringSecurityService springSecurityService 
    
       def myAction() {
          long userId = springSecurityService.getCurrentUserId()
       }
    }