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

相关问题