Пользовательский UserDetailsService не вызывается - Grails & Spring Security Core

Я использую Grails v2.4.2 с плагинами spring-security-rest, spring-security-core и spring-security-ui.

Я написал пользовательский UserDetailsService, чтобы сделать имя пользователя без учета регистра. Все, что я делаю, просто пытаюсь переопределить

UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException 

Мой com.example.core.CaseInsensitiveUserDetailsService класс определяется как:

class CaseInsensitiveUserDetailsService extends GormUserDetailsService {

    /**
     * Make The Username Case Insensitive
     */
    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException {
        Person.withTransaction { status ->

            log.debug "Case Insensitive User Details Service"

            // Find The Username
            def user = Person.findByUsernameIlike(username)

            // If User Not Found, Throw Exception
            if (!user) {
                log.warn "User not found: $username"
                throw new UsernameNotFoundException('User not found', username)
            }

            Collection<GrantedAuthority> authorities = loadAuthorities(user, username, loadRoles)
            createUserDetails user, authorities
        }
    }
}

Мои ресурсы.гроовы содержат:

beans = {

    userDetailsService(com.example.core.CaseInsensitiveUserDetailsService)

    credentialsExtractor(Grails24CredentialExtractor)

    // Some Custom Filters Are Also Defined (securityContextRepository, securityContextPersistenceFilter, multipartResolver)

}

Он успешно компилируется, но никогда не запускает мой пользовательский CaseInsensitiveUserDetailsService. В консоли я вижу отладочные операторы из фактического GormUserDetailsService вместо моего собственного. Что можно сделать, чтобы использовать мой пользовательский UserDetailsService?

** Примечание: я следовал этим двум урокам:

  1. http://www.stevideter.com/2012/11/17/case-insensitive-usernames-using-spring-security-core-plugin-for-grails/
  2. http://grails-plugins.github.io/grails-spring-security-core/guide/userDetailsService.html

2 ответа

Я написал этот пример для образовательных (самостоятельных) целей, возможно, он может помочь: https://github.com/grails-coder/grails-spring-security

Это касается:

  • Поставщики аутентификации
  • Пользовательский UserDetailsService

Пожалуйста, обратите внимание, что это на вершине Грааля 3.2.5

У меня была похожая проблема, когда я делал что-то похожее с другим плагином и Spring Security, и проводка должна быть сделана явно по имени. Попробуй в resources.groovy:

userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean->
    bean.autowire = "byName"
}
Другие вопросы по тегам