我有一個Web應用程序,它包含一個REST API,客戶端應用程序與/
生活在一起。當用戶會話超時並且客戶端js應用程序向REST API發出請求時,該請求將觸發登錄事件。一旦用戶登錄,用戶就會被帶到只顯示JSON響應的REST API端點。我想硬連線登錄頁面始終重定向到/
。已存在觸發登錄的請求,總是重定向到`/`
編輯1:我使用openid插件的spring-security-core插件以及grails 2.0.4。
編輯2:所以我設法得到一個解決方案的工作,但它有點粗俗,我想知道是否有一個更優雅的解決方案。
我grails-app/conf/LoginRedirectFilters.groovy
創建了一個簡單的過濾器:
class RedirectLoginFilters {
def filters = {
redirectAfterLogin (uri: '/api/*') {
before = {
if (session["LOGGING_IN"])
redirect uri: "/"
}
after = {
if (session["LOGGING_IN"])
session["LOGGING_IN"] = false
}
}
}
}
在我auth
功能OpenIdController.groovy
裏我加了會議標誌LOGGING_IN
:
def auth = {
def config = SpringSecurityUtils.securityConfig
if (springSecurityService.isLoggedIn()) {
redirect uri: config.successHandler.defaultTargetUrl
return
}
session["LOGGING_IN"] = true
.
.
.
這是通過只檢查是否正常工作LOGGING_IN
當api端點被調用時該標誌爲真,並且它在一個請求後也會終止該標誌,所以它不會干擾隨後的客戶端api調用。我意識到這是相當複雜的,所以如果有更好的解決方案,請讓我知道,謝謝!
您是否使用AJAX請求登錄? – 2012-08-16 16:25:05
沒有隻是標準登錄,現在是。切換到AJAX登錄系統無疑將解決這個問題,但是現在這是一個後門功能。 – 2012-08-16 20:05:41