如何自定义Spring Security UI添加字段

时间:2013-07-04 17:20:24

标签: grails spring-security grails-plugin

我已经安装了Spring Security UI。它使用默认字段:

  • 用户名
  • 电子邮件
  • 密码
  • 密码2

我想添加更多字段。例如:

  • phoneNumber的
  • grailsIsCool

所以我输入:

grails s2ui-override register packageName

它创建了一个扩展的空类: grails.plugins.springsecurity.ui.RegisterController

正确的方法是复制并粘贴扩展类的所有代码,其中默认字段一起显示(用户名,电子邮件,密码和密码2)然后,添加他们之后的新领域?(phoneNumber和grailsIsCool)。 Alain Perry遵循这种方法并在此处发布了代码:http://grails.1312388.n4.nabble.com/Using-spring-security-UI-with-customized-user-class-td2330737.html

1 个答案:

答案 0 :(得分:2)

我认为这是一个很好的问题。

我在5个月前开始使用Grails,我做的第一件事就是安装Spring Security和Spring Security UI。我最初使用插件提供的RegisterController,但我最终重写了大部分内容。

用户界面RegisterController包含很多业务逻辑 - 我更喜欢让我的控制器尽可能保持愚蠢,所以我创建了一个RegistrationService并移动了我需要的RegisterController代码。

另一个问题是RegisterController使用了grails命令对象模式。当我将我的应用程序部署到CloudFoundry并且无法弄清楚原因时,我遇到了问题。我后来读到其他人有experienced the same issue。简单的解决方法,但它让我挠了一会儿......

希望这有帮助。

编辑:

那么,关于你的实际问题。我想当我需要添加字段并以其他方式自定义插件工作方式时我采用的方法就是编写自己的实现。

您可以通过将此添加到User来覆盖默认的Spring Security UI RoleUserRoleConfig.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的{​​{1}}添加验证逻辑以处理这些字段其他领域。

至于把你的Command作为顶级课程,我只是把我和控制器放在同一个包里。需要注意的一点是,由于它们不再位于控制器内部,因此需要在其中添加Command注释,否则它们将无法在运行时使用各种验证方法。