我正在編寫使用Sprint Security進行身份驗證的Grails應用程序。我需要向用戶顯示一條消息,該用戶由於不活動而被自動註銷。Grails:處理HTTP會話超時事件
我的應用程序同時使用AJAX請求和直接請求到控制器。我注意到,對於AJAX請求衝刺安全返回代碼爲401的HTTP響應,我已經重新定義了默認的URL映射以這樣的方式:
class UrlMappings {
static mappings = {
// ...
"401" (controller: 'errors', action: 'inactivityLogout')
}
}
這裏是inacticityLogout()
方法的主體:
def inactivityLogout() {
log.debug("the user is logged out due to inactivity")
session.setAttribute('inactivityMessage', "You have been logged out due to inactivity.")
render(status: 401)
}
然後LoginController
檢查是否設置了inactivityMessage
屬性,並在登錄頁面上顯示相應的消息。
問題是這個解決方案對於AJAX調用工作正常,但當我試圖通過單擊應用程序中的直接鏈接導航到另一個頁面時不起作用。在第二種情況下,日誌爲空,因此方法inactivityLogout
未被調用。
Firebug顯示應用程序返回代碼302暫時移動,所以我雖然這是一個原因。但後來我注意到AJAX調用也返回了相同的代碼。所以,現在我不知道AJAX和非AJAX請求之間的區別以及爲什麼最後一個不是由Grails URL映射引擎處理。
任何想法,我目前的解決方案可能會出現什麼問題?這個問題能否以完全不同的方式解決?
謝謝!
你想顯示消息的基礎上,他們點擊或自動會話過期時,根本沒有任何用戶交互? – Gregg
是的,這個想法是在沒有任何用戶交互的情況下顯示消息。只是想讓用戶知道他爲什麼退出系統。 –