4

我正在從grails 2.2.2遷移到grails 2.3.4以避免2.2.2中的bug,其中spring security屬性消息中的文本值不顯示,但我遇到了各種問題。之前工作過的東西,現在不行。如何在Grails Spring Security 2.0中創建登錄/頁面inital屏幕?

問題

當我運行的Grails應用程序,初始默認頁面是index.gsp中這是標準的功能,但安裝和配置Spring Security的核心,春季安全LDAP和彈簧securiy UI插件後,我想使我的默認頁面成爲/login/auth

在以前的版本,我已經通過它的UrlMappings.groovy配置文件通過簡單的註釋,替換或刪除這一行

"/"(view:"/index") 

這一個

"/"(view:"/login/auth") 

我的配置完成.groovy被設置爲如果認證成功將我帶到主頁

grails.plugin.springsecurity.userLookup.userDomainClassName = 'security.Person' 
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'security.PersonAuthority' 
grails.plugin.springsecurity.authority.className = 'security.Authority' 
grails.plugin.springsecurity.requestMap.className = 'security.Requestmap' 
grails.plugin.springsecurity.securityConfigType = 'Requestmap' 
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/home/' 

,並在引導我Requestmap條目(如果他們是對這個問題的任何重要情況如下):

for (String url in [ 
     '/', '/index', '/index.gsp', '/**/favicon.ico', 
     '/**/js/**', '/**/css/**', '/**/images/**', 
     '/login', '/login.*', '/login/*', 
     '/logout', '/logout.*', '/logout/*']) { 
    new Requestmap(url: url, configAttribute: 'permitAll').save() 
    } 

    new Requestmap(url: '/home/*', configAttribute: 'IS_AUTHENTICATED_FULLY').save() 

事實證明,當我這樣做......尤里卡登錄/ AUTH來一旦應用程序啓動,但是當我輸入正確的身份驗證憑證時,它似乎沒有進行身份驗證,它確實會發出「輕微的小閃爍」,並再次顯示自身。

但是,如果我刪除此行

"/"(view:"/login/auth") 

,並把此一回在

"/"(view:"/index") 

,然後當我重新啓動應用程序,我手動登錄/ AUTH,並把正確的然後它正確地把我帶到主頁。

質詢

  1. 我錯過任何配置設置的任何地方,這將使該登錄/ AUTH第一頁(也讓我進行身份驗證)?

  2. 我不確定這是否應該是一個單獨發佈的問題,但現在通過設計登錄頁面它是插件的一部分,它是由我的代碼生成和部分代碼之前,我可以在我的意志風格。我是否必須在我的應用程序中複製粘貼LoginControllerAuth.gsp以定製視圖還是有更好的首選方式?

在此先感謝。

回答

3

Spring Security中的身份驗證機制通過在顯示登錄頁面時跟蹤引用URL來工作。然後在成功登錄時重定向到此頁面。如果您希望登錄頁面成爲第一頁,那麼人們只會讓根視圖需要驗證。我假設你的應用程序的大部分(如果不是全部)需要身份驗證。如果是這種情況,則不需要將登錄頁面設置爲根視圖。假設/home/*下的所有內容都被鎖定,Spring Security會檢測到這一情況,並在請求任何安全頁面時立即重定向到登錄頁面。長話短說,你讓它比需要的更難。

至於你的第二個問題,我相信你只需要在你的應用程序中創建自己的版本來定製它們。

+0

使默認的登錄網址/login/auth,你點燃一個燈泡。我可以通過在視圖和我自己的auth.gsp下創建一個登錄文件夾來自定義登錄屏幕。無需將LoginController複製到我的代碼庫 – Viriato

+0

謝謝,「Spring Security通過跟蹤推薦URL工作」幫助我找出了與我的應用程序有關的問題。登錄頁面保持重定向到一個URL,該URL在用戶通過鏈接進入登錄頁面之前顯示的默認頁面上由Javascript調用。事實證明,該腳本無法訪問該URL,因爲它受Spring Security保護;大概在失敗的嘗試Spring Security記住登錄後的URL。根據您的提示,我將該URL添加到無需登錄即可訪問的頁面列表中。現在好了。 – HumanInDisguise

1

嘿,我不是很肯定你的問題,但是當你說「Spring Security的工作原理是跟蹤的推薦網址的」您可以嘗試通過

grails.plugin.springsecurity.auth.loginFormUrl = '/login/auth'