我正在使用带有 spring-security-rest、spring-security-core 和 spring-security-ui 插件的 Grails v2.4.2。
我编写了一个自定义 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
}
}
}
我的resources.groovy包含:
beans = {
userDetailsService(com.example.core.CaseInsensitiveUserDetailsService)
credentialsExtractor(Grails24CredentialExtractor)
// Some Custom Filters Are Also Defined (securityContextRepository, securityContextPersistenceFilter, multipartResolver)
}
它编译成功,但它从未真正运行我的自定义CaseInsensitiveUserDetailsService。在控制台中,我看到了来自实际 GormUserDetailsService 的调试语句,而不是我的自定义语句。可以做些什么来使用我的自定义 UserDetailsService?
**注意:我一直在关注这两个教程: