Search code examples
grailsdependency-injectionspring-security

Dependency injection not working inside Grails service


I have a class that I moved under the grails-app/services directory in order to inject the springSecurityService. This class is the implementation (Is that the proper terminology?) of the spring userDetailsService class. Here is my declaration in resources.groovy:

userDetailsService(com.company.product.PracticeUserDetailsService) {
    grailsApplication = ref('grailsApplication')
}

This class is extending GormUserDetailsService.

My attempted dependencyInjection results in a null object.

class PracticeUserDetailsService extends GormUserDetailsService{

    def springSecurityService

    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException {
        // impl omitted
    }
}

If I create some test controller or some service in grails and inject the springSecurityService, it works fine. So, there is perhaps something about this particular class that is not placing it in the Grails ecosystem. I checked out this to try to manually inject it as follows:

beans = {
    springSecurityTEST(grails.plugins.springsecurity.SpringSecurityService) {}

}

Solution

  • Move PracticeUserDetailsService from grails-app/services to src/groovy and change your Spring bean definition in resources.groovy to:

    userDetailsService(com.company.product.PracticeUserDetailsService) {
        grailsApplication = ref('grailsApplication')
        springSecurityService = ref('springSecurityService')
    }