2017-07-24 40 views
0

我有一個基於Spring-Security的grails-app,當會話超時時,我想重定向到開始頁面。Grails,在AJAX調用中處理會話超時

這似乎很難解決,所以至少我想要一個解決方案,當你點擊一個連接到Ajax函數的鏈接時重定向到開始頁面。 因爲當你點擊鏈接時很煩人,並且因爲你的會話超時而沒有任何反應。 希望有人能告訴我一個簡單的解決方案或至少一個解決方案。

+0

我想如果你的ajax在sesson過期後調用了一個控制器動作,它有一個安全標註spring-security-core插件會自動將用戶重定向到登錄頁面。 如果你使用的是spring-security-rest插件,那麼你可以檢查401(未授權)r esponse狀態並重定向到登錄頁面。 –

回答

0

一種選擇是通過頭「的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