我認爲這是一個很好的問題。
大約5個月前我開始使用Grails,我做的第一件事之一是安裝Spring Security和Spring Security UI。我最初使用插件提供的RegisterController
,但是我最終重寫了大部分內容。
的UI RegisterController
含有大量的商業邏輯 - 我寧願讓我的控制器一樣傻乎乎的可能,所以我創建了一個RegistrationService
和移動RegisterController
代碼我需要在那裏。
另一個問題是RegisterController
對grails命令對象模式的使用。我將應用程序部署到CloudFoundry時遇到了問題,但無法找出原因。後來我讀到其他人有experienced the same issue。簡單的解決方法,但它讓我撓了我的頭一陣子...
希望這會有所幫助。
編輯:
因此,對你的實際問題。我想我需要添加字段並自定義插件工作方式的方法就是編寫自己的實現。
您可以通過添加這Config.groovy
覆蓋默認的Spring Security UI User
,Role
和UserRole
類:
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
的Command
添加驗證邏輯來處理這些附加字段。
至於把你的Command
作爲頂級的課程,我只是把我和我的控制器放在同一個包裏。需要注意的一點是,由於它們不再位於控制器內部,因此它們需要添加一個@grails.validation.Validateable
註釋,否則在運行時它們將不具有各種可用的驗證方法。
很高興知道。謝謝!所以,如果我得到'函數調用錯誤'不兼容的對象參數',我應該創建兩個獨立的類:'RegisterCommand'和'ResetPasswordCommand'。但是哪裏?另一方面,我寫信給插件作者[這裏](http://jira.grails.org/browse/GPSPRINGSECURITYUI-54) – chelder
更新了我的答案,提供了更多關於如何擴展默認Spring Security UI用戶實現的信息。 – rcgeorge23
我相信你的答案對很多人來說都是非常有用的!對我來說也是:)但是可以肯定的是,你有和'RegisterController.groovy'相同的包:'RegisterCommand.groovy'和'ResetPasswordCommand'(帶有@grails.validation.Validateable)。如果可以的話,讓我們等待幾天,然後回答插件的作者。我仍然相信「魔術」的方式來添加字段... – chelder