首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义UserDetailsService未被调用- Grails & Spring安全核心

自定义UserDetailsService未被调用- Grails & Spring安全核心
EN

Stack Overflow用户
提问于 2015-04-14 14:51:19
回答 2查看 1.2K关注 0票数 0

我使用Grailsv2.4.2与spring-security-rest、spring-security-core和spring-security-ui插件。

我编写了一个定制的UserDetailsService,使用户名不区分大小写。我所做的只是简单地试图覆盖

代码语言:javascript
复制
UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException 

我的com.example.core.CaseInsensitiveUserDetailsService类定义为:

代码语言:javascript
复制
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包含:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2015-04-14 18:51:40

在使用不同的插件和Security进行类似的操作时,我也遇到了类似的问题,并且需要明确地指定连接的名称。在resources.groovy中尝试

代码语言:javascript
复制
userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean->
    bean.autowire = "byName"
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-08 19:20:58

我编写这个示例是为了教育(自我)目的,也许它会有所帮助:https://github.com/grails-coder/grails-spring-security

它涉及:

  • 认证提供者
  • 自定义UserDetailsService

请注意,它位于grails 3.2.5的顶部

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29630568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档