2013-02-26 151 views
2

我有一個問題,我的userDetailsS​​ervice注入我的自定義提供程序。我有一個自定義的userDetailsS​​ervice,我試圖注入到我的提供者,但是,由於某種原因從我的提供者這解決了一個空的userDetailsS​​ervice。 以下是從我的resources.groovy:grails彈簧安全定製userDetailsS​​ervice

beans = { 
    userDetailsService(CustomUserDetailsService) { 
    } 

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

基本上我只是將其定義在我的供應商如下:

public class StupidAuthenticationProvider implements AuthenticationProvider { 
def userDetailsService 

我缺少什麼?

+0

由[春安芯(HTTPS定義的豆展望。 com/grails-plugins/grails-spring-security-core/blob/master/SpringSecurityCoreGrailsPlugin.groovy)這似乎是正確的名稱。你確定你聲明'userDetailsS​​ervice'?在你的引導中,如果你打印'grailsApplication.mainContext.getBean('userDetailsS​​ervice')'這個實例是'CustomUserDetailsS​​ervice'? – 2013-02-26 12:28:05

+0

是的:com.test.CustomUserDetailsS​​[email protected] – 2013-02-26 12:32:20

+0

你是如何使用stupidAuthenticationProvider的? – 2013-02-26 12:37:19

回答

1

嘗試使用類的限定名稱:

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

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

這並沒有改變任何東西 – 2013-02-26 12:44:17

2

在包你CustomUserDetailsS​​ervice?如果是,那麼你應該在配置中給它完全限定的名稱。

以下是爲我工作:// github上:

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

我有一個userDetailsS​​ervice沒有完全限定的名稱,它運作良好。 – 2013-02-26 13:00:28

+1

在beans DSL中,括號中的參數是'java.lang.Class'對象 - 您可以使用完全限定名稱userDetailsS​​ervice(com.mysite.MyUserDetailsS​​ervice)或只使用普通名稱userDetailsS​​ervice(MyUserDetailsS​​ervice) '並且在文件的頂部添加一個合適的'import com.mysite。*'。兩種變體都是相同的。 – 2013-02-26 13:06:51

+0

謝謝@IanRoberts,我不知道:) – uchamp 2013-02-26 13:16:56