我使用Grailsv2.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
}
}
}我的resources.groovy包含:
beans = {
userDetailsService(com.example.core.CaseInsensitiveUserDetailsService)
credentialsExtractor(Grails24CredentialExtractor)
// Some Custom Filters Are Also Defined (securityContextRepository, securityContextPersistenceFilter, multipartResolver)
}它成功地编译,但它从未实际运行我的自定义CaseInsensitiveUserDetailsService.。在控制台中,我看到来自实际GormUserDetailsService的调试语句,而不是自定义的调试语句。如何使用我的自定义UserDetailsService?
** 注:--我一直在学习以下两篇教程:
发布于 2015-04-14 18:51:40
在使用不同的插件和Security进行类似的操作时,我也遇到了类似的问题,并且需要明确地指定连接的名称。在resources.groovy中尝试
userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean->
bean.autowire = "byName"
}发布于 2017-03-08 19:20:58
我编写这个示例是为了教育(自我)目的,也许它会有所帮助:https://github.com/grails-coder/grails-spring-security
它涉及:
请注意,它位于grails 3.2.5的顶部
https://stackoverflow.com/questions/29630568
复制相似问题