2013-07-04 39 views
2

我已經安裝了Spring Security UI。它正在與默認字段:如何自定義Spring Security UI添加字段

  • 用戶名
  • 電子郵件
  • 密碼
  • 密碼2

我要添加更多的字段。例如:

  • phoneNumber的
  • grailsIsCool

所以I型:

grails s2ui-override register packageName 

它創建延伸的空類:grails.plugins.springsecurity.ui.RegisterController

是做複製粘貼&在默認域一起出現(用戶名,電子郵件,密碼和密碼2)則擴展類的所有代碼的正確方式,加入後他們新的領域?(phoneNumber和grailsIsCool)。阿蘭佩裏採用這種方法,並張貼代碼在這裏:http://grails.1312388.n4.nabble.com/Using-spring-security-UI-with-customized-user-class-td2330737.html

回答

2

我認爲這是一個很好的問題。

大約5個月前我開始使用Grails,我做的第一件事之一是安裝Spring Security和Spring Security UI。我最初使用插件提供的RegisterController,但是我最終重寫了大部分內容。

的UI RegisterController含有大量的商業邏輯 - 我寧願讓我的控制器一樣傻乎乎的可能,所以我創建了一個RegistrationService和移動RegisterController代碼我需要在那裏。

另一個問題是RegisterController對grails命令對象模式的使用。我將應用程序部署到CloudFoundry時遇到了問題,但無法找出原因。後來我讀到其他人有experienced the same issue。簡單的解決方法,但它讓我撓了我的頭一陣子...

希望這會有所幫助。

編輯:

因此,對你的實際問題。我想我需要添加字段並自定義插件工作方式的方法就是編寫自己的實現。

您可以通過添加這Config.groovy覆蓋默認的Spring Security UI UserRoleUserRole類:

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域類,你也需要向RegisterControllerCommand添加驗證邏輯來​​處理這些附加字段。

至於把你的Command作爲頂級的課程,我只是把我和我的控制器放在同一個包裏。需要注意的一點是,由於它們不再位於控制器內部,因此它們需要添加一個@grails.validation.Validateable註釋,否則在運行時它們將不具有各種可用的驗證方法。

+0

很高興知道。謝謝!所以,如果我得到'函數調用錯誤'不兼容的對象參數',我應該創建兩個獨立的類:'RegisterCommand'和'ResetPasswordCommand'。但是哪裏?另一方面,我寫信給插件作者[這裏](http://jira.grails.org/browse/GPSPRINGSECURITYUI-54) – chelder

+0

更新了我的答案,提供了更多關於如何擴展默認Spring Security UI用戶實現的信息。 – rcgeorge23

+0

我相信你的答案對很多人來說都是非常有用的!對我來說也是:)但是可以肯定的是,你有和'RegisterController.groovy'相同的包:'RegisterCommand.groovy'和'ResetPasswordCommand'(帶有@grails.validation.Validateable)。如果可以的話,讓我們等待幾天,然後回答插件的作者。我仍然相信「魔術」的方式來添加字段... – chelder

相關問題