0

我正在使用带有 spring-security-rest、spring-security-core 和 spring-security-ui 插件的 Grails v2.4.2。

我编写了一个自定义 UserDetailsS​​ervice 以使用户名不区分大小写。我所做的只是试图覆盖

UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException 

我的com.example.core.CaseInsensitiveUserDetailsS​​ervice类定义为:

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)

}

它编译成功,但它从未真正运行我的自定义CaseInsensitiveUserDetailsS​​ervice。在控制台中,我看到了来自实际 GormUserDetailsS​​ervice 的调试语句,而不是我的自定义语句。可以做些什么来使用我的自定义 UserDetailsS​​ervice?

**注意:我一直在关注这两个教程:

  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/userDetailsS​​ervice.html
4

2 回答 2

0

在使用不同的插件和 Spring Security 做类似的事情时,我遇到了类似的问题,并且需要明确地按名称进行接线。尝试resources.groovy

userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean->
    bean.autowire = "byName"
}
于 2015-04-14T18:51:40.333 回答
0

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

它涉及:

  • 身份验证提供程序
  • 自定义 UserDetailsS​​ervice

请注意它位于 grails 3.2.5 之上

于 2017-03-08T19:20:58.237 回答