Grails Spring Security自定义UserDetailsService(以电子邮件代替用户名的目标)

Grails Spring Security自定义UserDetailsService(以电子邮件代替用户名的目标),grails,spring-security,Grails,Spring Security,我使用的是grailspring安全插件1.2.7.3,希望用户通过电子邮件地址和密码进行身份验证。我想将电子邮件地址作为主要登录ID 我遇到了以下问题,原来的海报也在尝试这样做。然而,我在几点上有点困惑: 我知道我需要编写自己的userdetailssservice实现,并在grailsapp/conf/spring/resources.groovy中注册它 但是,我不确定UserDetailsService的自定义实现应该放在哪个文件夹(最佳实践)。我猜要么是/grails-app/serv

我使用的是
grailspring安全插件1.2.7.3
,希望用户通过电子邮件地址和密码进行身份验证。我想将电子邮件地址作为主要登录ID

我遇到了以下问题,原来的海报也在尝试这样做。然而,我在几点上有点困惑:

  • 我知道我需要编写自己的
    userdetailssservice
    实现,并在
    grailsapp/conf/spring/resources.groovy
    中注册它

    但是,我不确定
    UserDetailsService
    的自定义实现应该放在哪个文件夹(最佳实践)。我猜要么是
    /grails-app/services
    /grails-app/utils
    ,要么是
    /src/groovy
    。以前有人这样做过吗?定制
    userdetails服务的最佳位置在哪里

    我在文档中读了这一章:但我并没有真正看到关于将其放入Grails文件夹的指导

  • 我通过s2命令创建了我的用户域类:

    s2-quickstart com.philiptenn.security User Role Requestmap
    
    如果我将
    User.username
    字段重命名为
    User.email
    ,以便代码更清晰,我会受到伤害吗

    我找到了这个字段的用法,其中一个在DefaultSecurityConfig.groovy中突出显示:
    userLookup.usernamePropertyName='username'

    我可以将此更新为: DefaultSecurityConfig.groovy
    userLookup.usernamePropertyName='email'


  • 多谢各位

    正如您所指出的,您可以覆盖您自己的
    Config.groovy
    中的默认安全配置,所有选项都以
    grails.plugins.springsecurity
    开头,因此它将是
    grails.plugins.springsecurity.userLookup.usernamePropertyName='email'
    ()。这是我要做的第一件事。如果您查看默认的userDetailsService的源,您将看到它使用该属性进行查找。

    谢谢,成功了,我现在正在使用电子邮件。还有一个问题。。。我应该把一个定制的Spring安全
    UserDetailsService
    放在哪里?我在想
    /grails app/services
    ,这是正确的地方吗?我希望其他人也能参与进来,我注意到在我的几个应用中,我在
    /src/groovy
    中有我的
    customuserdetails服务
    ,但我想不出有什么好的理由,为什么它不在
    grails app/services
    中。没问题,谢谢。我可能会把它放在
    src/groovy
    中,因为它听起来很有用。@doelleri-在
    /src/groovy
    中的类被当作“普通”的Springbean,虽然Grails服务对它们做了更多的工作,并且在如何通过Spring将它们连接到事物方面做了一些特殊的处理。@cdeszaq-由于自定义UserDetailsService bean必须在
    参考资料中声明。groovy
    ,这是否就等同于此?