2015-09-25 95 views
4

我有一個使用Grails的Grails應用程序spring security 2.0.RC-5插件。 假設我打開了2個選項卡。 1日,我退出了應用程序。然後,在第二個,我點擊一個按鈕,使應用程序的AJAX調用。Grails Spring Security插件 - 登錄窗體重定向到ajaxAuth

因爲我已註銷,所以入口點將是LoginController.authAjax。 通過這種方法插件生成默認代碼是

response.setHeader 'Location', SpringSecurityUtils.securityConfig.auth.ajaxLoginFormUrl 
response.sendError HttpServletResponse.SC_UNAUTHORIZED 

我得到的401對我的Ajax調用它的確定。 現在的問題是,如果我回到登錄頁面並重新提交登錄表單,我將重定向到方法LoginController.authAjax

在這個方法中的代碼是

render([success: true, username: springSecurityService.authentication.name] as JSON) 

這反過來,不重定向我到儀表板頁面中的應用程序,但呈現 {"success":true,"username":"user1"}

很顯然,這不是預期的行爲。我該如何解決? 謝謝

回答

2

這是Spring Security的核心插件的默認行爲,當你登錄並嘗試訪問受保護的URL,它存儲的是URL進入會議,並重定向回您在同一網址成功登錄後,用戶不必手動轉到原始請求的頁面。

如果要永久禁用此行爲,您可以指定以下配置到您的Config.groovy

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true 

看到它,http://grails-plugins.github.io/grails-spring-security-core/guide/urlProperties.html

但是,如果你要有條件地禁用這個,你可以也可以通過清除會話變量,如上所述:

在您的authAjax操作:

def authAjax() { 
    if (request.xhr) { // For any AJAX request or any condition you want 
     session["SPRING_SECURITY_SAVED_REQUEST"] = null 
    } 
} 
+0

很好的答案。我知道第一部分,但我不知道解決這個問題的最佳方法。我會將其標記爲正確的。謝謝。我會在早上嘗試這個。 – ionutab

+0

當然,試試吧。這應該工作 –

相關問題