2013-02-26 3 views
2

У меня возникли проблемы с вводом моего userDetailsService в мой пользовательский провайдер. У меня есть пользовательский метод userDetailsService, который я пытаюсь ввести моему провайдеру, однако по какой-то причине из моего провайдера это разрешается в null userDetailsService. Ниже моего resources.groovy:grails spring security custom userDetailsService

beans = { 
    userDetailsService(CustomUserDetailsService) { 
    } 

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

В основном я просто определив его в моем поставщика следующим образом:

public class StupidAuthenticationProvider implements AuthenticationProvider { 
def userDetailsService 

Что мне не хватает?

+0

Глядя в бобах, определенных [Spring Security Core] (https: // GitHub. com/grails-plugins/grails-spring-security-core/blob/master/SpringSecurityCoreGrailsPlugin.groovy) это, кажется, правильное имя. Вы уверены, что вы объявили 'userDetailsService'? В вашем бутстрапе, если вы печатаете 'grailsApplication.mainContext.getBean ('userDetailsService'), экземпляр' CustomUserDetailsService'? –

+0

Да: [email protected] –

+0

Как вы используете stupidAuthenticationProvider? –

ответ

1

Попробуйте использовать квалифицированное имя классов:

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

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

это ничего не меняло –

2

Ваш CustomUserDetailsService в пакете? Если да, то вы должны указать его полное имя в конфиге.

Следующая работает для меня:

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

У меня есть userDetailsService без полного имени, и оно работает хорошо. –

+1

В бобовом DSL параметр в круглых скобках является объектом 'java.lang.Class' - вы можете использовать полное имя' userDetailsService (com.mysite.MyUserDetailsService) 'или использовать просто пустое имя' userDetailsService (MyUserDetailsService) '_and also_ добавьте подходящий' import com.mysite. * 'в начало файла. Оба варианта эквивалентны. –

+0

Спасибо @IanRoberts, я не знал этого :) – uchamp