grails spring安全自定义用户详细信息服务

grails spring安全自定义用户详细信息服务,grails,spring-security,Grails,Spring Security,将UserDetails服务注入自定义提供程序时出现问题。我有一个自定义的userDetailsService,我正试图将它注入到我的提供者中,但是,由于我的提供者的某种原因,它在一个空的userDetailsService中解析。 以下内容来自my resources.groovy: beans = { userDetailsService(CustomUserDetailsService) { } stupidAuthenticationProvider(StupidAuthe

将UserDetails服务注入自定义提供程序时出现问题。我有一个自定义的userDetailsService,我正试图将它注入到我的提供者中,但是,由于我的提供者的某种原因,它在一个空的userDetailsService中解析。 以下内容来自my resources.groovy:

beans = {
  userDetailsService(CustomUserDetailsService) {
  }

  stupidAuthenticationProvider(StupidAuthenticationProvider) {
    userDetailsService = ref("userDetailsService")
  }
}
基本上,我只是在我的提供者中定义它,如下所示:

public class StupidAuthenticationProvider implements AuthenticationProvider {
def userDetailsService

我缺少什么?

尝试使用类的限定名称:

    beans = {
        userDetailsService(com.test.CustomUserDetailsService){
        }

        StupidAuthenticationProvider(com.test.XXX.StupidAuthenticationProvider) {
            userDetailsService = ref('userDetailsService ')
        }
    }

您的CustomUserDetails服务是否在包中?如果是,那么您应该在配置中给出它的完全限定名

以下内容适用于我:

beans = {
    userDetailsService(com.mysite.MyUserDetailsService)
//and then refer it like...
    emailAuthenticationProvider(com.mysite.EmailAuthenticationProvider) {
        springSecurityService = ref('springSecurityService')
        userDetailsService = ref('userDetailsService')
    }
}
在身份验证提供程序中

class EmailAuthenticationProvider implements AuthenticationProvider {

    def userDetailsService
    def springSecurityService

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        //...
    }
}

查看由此定义的bean似乎是正确的名称。是否确实声明了
userDetailsService
?在引导过程中,如果打印
grailsApplication.mainContext.getBean('userdetailssservice')
实例是
customuserdetailssservice
?是:com.test。CustomUserDetailsService@6180ef93How你在使用stupidAuthenticationProvider吗?基本上,我刚刚将提供程序添加到springsecurity.providerNames。。。grails.plugins.springsecurity.providerNames=['stupidAuthenticationProvider']这一切进展顺利,当我尝试登录此提供程序时会触发。进入stupidAuthenticationProvider后,我将userDetailsService定义为:def userDetailsService,但这被解析为null,只是println userdetails服务或尝试调用一些方法resolvs作为null问题只是userdetails服务似乎没有被正确注入这没有改变任何事情我有一个userdetails服务没有完全限定的名称,它工作得很好。在bean DSL中,括号中的参数是
java.lang.Class
对象-您可以使用完全限定名
userDetailsService(com.mysite.MyUserDetailsService)
或仅使用普通名
userDetailsService(MyUserDetailsService)
并在文件顶部添加合适的
import com.mysite.
。两种变体都是等效的。谢谢@IanRoberts,我不知道:)