未调用自定义UserDetails服务-Grails&;Spring安全内核

未调用自定义UserDetails服务-Grails&;Spring安全内核,grails,spring-security,userdetailsservice,Grails,Spring Security,Userdetailsservice,我正在使用grailsv2.4.2和springsecurityrest、springsecuritycore以及springsecurityui插件 我已经编写了一个自定义UserDetailsService,使用户名不区分大小写。我所做的只是试图超越 UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException Mycom.example.core.C

我正在使用grailsv2.4.2和springsecurityrest、springsecuritycore以及springsecurityui插件

我已经编写了一个自定义UserDetailsService,使用户名不区分大小写。我所做的只是试图超越

UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException 
Mycom.example.core.CaseInsensitiveUserDetails服务类定义为:

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
        }
    }
}
它编译成功,但从未实际运行我的自定义CaseInsensitiveUserDetails服务。在控制台中,我看到来自实际GormUserDetailsService的调试语句,而不是我的自定义语句。如何使用自定义UserDetails服务

**注意:我一直在学习以下两个教程:


  • 我在使用不同的插件和Spring安全性执行类似操作时遇到了类似的问题,并且接线需要显式地按名称进行。在
    参考资料中试用。groovy

    userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean->
        bean.autowire = "byName"
    }
    

    我写这个例子是为了教育(自我)的目的,也许它会有帮助:

    它涉及:

    • 身份验证提供者
    • 自定义用户详细信息服务

    请注意,它位于grails 3.2.5之上。您是否创建了此插件,然后将其安装到应用程序中?不,它只是一个类。您能否显示您的配置(对安全和日志部分感兴趣)以及请求和响应的输出?@JeremyWagner您是如何解决此问题的?这毫无意义。自动布线更方便,因为您不需要显式地定义每一个,但如果您愿意,可以随时这样做
    userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean->
        bean.autowire = "byName"
    }