Пользовательский 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?
** Примечание: я следовал этим двум урокам:
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"
}