0

我有一個在AngularJS/Javascript上開發的Web應用程序,後端是Java/Spring。我有一個與我的Web應用程序的會話管理相關的問題。如何在會話結束時將Web應用程序流重定向到特定頁面?

我已經使用web.xml會話超時參數會話配置如下圖所示設置會話超時,

<session-config> 
    <session-timeout>1</session-timeout> 
</session-config> 

現在1分鐘後,會話超時。我有一個場景,在會話超時後需要將我的Web應用程序流重定向到登錄頁面。場景1:如果我點擊任何需要加載新頁面的鏈接/按鈕,它會自動檢測到會話超時,並將應用程序重定向到登錄頁面。這工作很好。

情況2:但如果頁面包含我選擇的任何下拉列表,則應用程序不會重定向到登錄頁面。 這是問題。

通常會發生什麼情況:當我從下拉列表中選擇任何值時,它會對後端進行其餘的調用,並獲取填充頁面上的值所需的數據。現在,如果會話在一分鐘後結束,並且如果選擇下拉菜單,則會話結束時不會撥打任何後端電話。

現在,在這種情況下應該做些什麼來確保即使當我選擇下拉菜單並且會話結束時,它也會以某種方式檢測到它並將應用程序重定向到登錄頁面。有沒有一種方法使用角JS或JavaScript來檢查會話是否仍然活着,當我選擇下拉值,並可以根據需要重定向流量?

考慮到當我選擇下拉式流程不會進入後端時,我想我可能需要僅在客戶端(前端)而不是後端處理此重定向。不知道如何做到這一點。

任何幫助,將不勝感激。

+0

您是否在來自用戶界面的任何請求時進行了身份驗證?如果你這樣做了,那麼你需要檢查會話的時間是否有效。 –

+0

嗨Ramesh,身份驗證是使用Spring安全性完成的。但是,這隻會發生一次,我猜測Web應用服務器何時啓動或啓動。我不知道在登錄之後我是否可以在應用程序中稍後使用該配置。 – WebNoob

回答

0

你可以使用http intercetor來幫助你在這裏。基本上,攔截器將在您每次發出請求時執行,在發出請求時發生錯誤,響應時或響應中出現錯誤時執行。根據響應狀態,您可以將控件重定向到錯誤頁面。

app.factory('CustomHttpInterceptor',[ '$q' , '$location', function($q , $location, TimeoutBroadCaster){ 
     return{ 
      request: function(config) { 
       return config; 
      }, 

      requestError: function(config) { 
       return config; 
      }, 

      response: function(res) { 
       return res; 
      }, 

      responseError: function(res) {    
       if(res.status != 200){ 
        $location.path('timed-out'); 
       } 
       return res; 
      } 
     } 

    } 

    ]); 

,然後在應用程序配置的方法啓動,你把這個攔截在隊列

$httpProvider.interceptors.push('CustomHttpInterceptor'); 

爲了方便起見,在服務器端,你可以拿出一些自定義的錯誤狀態,其可以幫助您確定會話是否超時,並專門針對該情況撰寫檢查。

+0

Hi Paras,非常感謝您的回答。但問題是當我選擇一個下拉值時,請求不會到後端。 例如,如果我選擇下拉值作爲「本田」,後端有一個方法「getCarsByCompany」,它可以獲取本田生產的汽車列表。當會話處於活動狀態時,呼叫將進入後端,並且如果獲取汽車列表。 但是當一分鐘後會話結束時,呼叫本身並未達到「getCarsByCompany」方法。我已經調試過了。因此,我無法做出任何迴應,因爲迴應本身並不來自後端。其他解決方案? – WebNoob

+0

你在使用java嗎?您可以創建一個過濾器來檢查會話是否已過期並設置狀態。 我在我自己的應用程序中使用類似的設置。 – Paras

相關問題