grails spring security自定义userDetailsS​​ervice

时间:2013-02-26 12:14:21

标签: grails spring-security

我在将userDetailsS​​ervice注入自定义提供程序时遇到问题。我有一个自定义userDetailsS​​ervice,我正在尝试向我的提供者注入,但是,出于某种原因,我的提供者将其解析为null userDetailsS​​ervice。 以下是来自我的resources.groovy:

beans = {
  userDetailsService(CustomUserDetailsService) {
  }

  stupidAuthenticationProvider(StupidAuthenticationProvider) {
    userDetailsService = ref("userDetailsService")
  }
}

基本上我只是在我的提供者中定义它如下:

public class StupidAuthenticationProvider implements AuthenticationProvider {
def userDetailsService

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您的CustomUserDetailsS​​ervice是否在包中?如果是,那么您应该在配置中给出它的完全限定名称。

以下内容对我有用:

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 {
        //...
    }
}

答案 1 :(得分:1)

尝试使用类的限定名称:

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

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