我认为这是一个很好的问题。
我大约 5 个月前开始使用 Grails,我做的第一件事就是安装 Spring Security 和 Spring Security UI。我最初使用RegisterController
插件提供的,但最终我重写了大部分。
UIRegisterController
包含很多业务逻辑——我更喜欢让我的控制器尽可能地笨,所以我创建了一个RegistrationService
并将RegisterController
我需要的代码移到那里。
另一个问题是RegisterController
grails 命令对象模式的使用。当我将我的应用程序部署到 CloudFoundry 时遇到了问题,但不知道为什么。后来我读到其他人也遇到过同样的问题。简单的解决方法,但它让我摸不着头脑......
希望这可以帮助。
编辑:
所以,关于你的实际问题。我想当我需要添加字段或自定义插件的工作方式时我采取的方法就是编写我自己的实现。
您可以通过将其添加到以下内容来覆盖默认 Spring Security UIUser
和类:Role
UserRole
Config.groovy
grails.plugins.springsecurity.userLookup.userDomainClassName = 'com.myapp.MyUser'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'com.myapp.MyUserRole'
grails.plugins.springsecurity.authority.className = 'com.myapp.MyRole'
如果您需要额外的字段,只需将它们添加到您的User
域类中,您还需要将验证逻辑添加到RegisterController
sCommand
以处理这些额外的字段。
至于把你Command
的 s 作为顶级类,我只是把我的和控制器放在同一个包中。需要注意的一件事是,由于它们不再位于您的控制器中,因此需要向@grails.validation.Validateable
它们添加注释,否则它们在运行时将无法使用各种验证方法。