Grails 3 Spring 安全性 UI 插件将自定义字段添加到注册表单

Grails 3 Spring Security UI Plugin Add Custom Fields to Registration Form

Grails/Spring 这里是安全新手,我在遗留系统上工作,需要来自权威来源的一些正确答案。

使用 Grails 3 和 Spring 安全性 UI 插件的 3.1.2 版, 我只是想在注册表中添加 phone 号码和国家/地区等新字段,但我尝试了很多方法都无济于事。所有 Whosebug 答案都已过时或不完整。 我按照文档和 运行 s2ui 覆盖脚本扩展了 RegisterController 并复制了原始控制器中的所有内容,并在 RegisterCommand class 中添加了新字段,并编辑了 gsps 以显示新字段。

然而,当我启动应用程序并尝试注册时,我没有得到方法错误的签名,因为我将修改后的 RegisterCommand 与附加字段传递给 uiRegistrationStrategy.createUser 方法,该方法需要原始 RegisterCommand值。我尝试扩展 DefaultRegistrationCodeStrategy 或 SpringSecurityUiService 但没有走得太远,只是想确保我走在正确的道路上。

我还缺少哪些额外的步骤?
createUser 方法似乎是由 SpringSecurityUiService 通过 DefaultRegistrationCodeStrategy 处理的,所以我假设我需要扩展两者是否正确?对于这样一个简单的任务来说,这太复杂了...

任何帮助将不胜感激。 谢谢!

我完成了以下步骤以向注册表单添加更多字段并使 createUser 和 register 方法起作用。

  • 扩展了 RegisterController 并向 RegisterCommand 内部 class 对象添加了额外的字段。

  • 扩展了 DefaultRegistrationCodeStrategy- MyDefaultRegistrationCodeStrategy

  • 扩展了 SpringSecurityUiService- MySpringSecurityUiService

  • 在 resources.groovy 上为 DI 添加了 bean 定义 - 这是让我迷路的部分。我必须为引用扩展服务的 MyDefaultRegistrationCodeStrategy 添加一个,也为引用扩展服务的 MySpringSecurityUiService 添加一个,引用父 SpringSecurityUiService.

    中已经提到的所有依赖项

    springSecurityUiService(MyspringSecurityUiService){ 添加来自父级的所有依赖}

    uiRegistrationCodeStrategy(MyRegistrationCodeStrategy){ springSecurityUiService = ref('springSecurityUiService')

我还必须在父级的 MySpringSecurityUiService 中包含 initialize() 方法,否则用户不会在 createUser 方法中生成。从 DefaultRegistrationCodeStrategy 调用父 SpringSecurityUiService 方法对于那些由于某种原因 RegisterCommand(例如注册)的更改而没有被覆盖的方法也有问题。只需使用来自父级的相同方法覆盖所有方法即可。

希望这对某人有所帮助,请随时纠正我的错误,如果您有更好的建议,请提出改进​​建议。 在过去的 3 天里试图解决这个问题,吸取了教训 - Grails 不适合没有相当多 Spring 知识的人,文档肯定会更好一些具体的例子。