我有一個基於Spring-Security的grails-app,當會話超時時,我想重定向到開始頁面。Grails,在AJAX調用中處理會話超時
這似乎很難解決,所以至少我想要一個解決方案,當你點擊一個連接到Ajax函數的鏈接時重定向到開始頁面。 因爲當你點擊鏈接時很煩人,並且因爲你的會話超時而沒有任何反應。 希望有人能告訴我一個簡單的解決方案或至少一個解決方案。
我有一個基於Spring-Security的grails-app,當會話超時時,我想重定向到開始頁面。Grails,在AJAX調用中處理會話超時
這似乎很難解決,所以至少我想要一個解決方案,當你點擊一個連接到Ajax函數的鏈接時重定向到開始頁面。 因爲當你點擊鏈接時很煩人,並且因爲你的會話超時而沒有任何反應。 希望有人能告訴我一個簡單的解決方案或至少一個解決方案。
一種選擇是通過頭「的nopage」值爲「真」與您的Ajax調用和春季安全插件的AjaxAwareAuthenticationEntryPoint
將返回HTTP狀態代碼401
另一種方法是創建一個自定義的身份驗證入口點。並在commence
檢查它是否是ajax請求,只是返回SC_UNAUTHORIZED
響應代碼。在你的javascript檢查中,如果狀態碼是SC_UNAUTHORIZED
401,那麼就適當地處理它。
class CustomAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
public CustomAuthenticationEntryPoint(String loginFormUrl) {
super(loginFormUrl)
}
@Override
void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, javax.servlet.ServletException {
if (SpringSecurityUtils.isAjax(request)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED)
return
}
super.commence(request, response, authException)
}
}
(見SpringSecurityCoreGrailsPlugin與名稱的AuthenticationEntryPoint找到豆,你需要重寫該bean。
如果您正在使用jQuery我想你可以使用全局ajaxError callback註冊bean作爲Spring Bean與名authenticationEntryPoint
我想如果你的ajax在sesson過期後調用了一個控制器動作,它有一個安全標註spring-security-core插件會自動將用戶重定向到登錄頁面。 如果你使用的是spring-security-rest插件,那麼你可以檢查401(未授權)r esponse狀態並重定向到登錄頁面。 –