我可以在没有任何请求到java服务器的情况下重定向页面吗?

时间:2014-02-18 11:08:14

标签: java servlets

如果会话在我的Web应用程序的web.xml文件中提到的特定时间到期, 没有点击任何链接,我的应用程序需要重定向到登录页面。我尝试使用实现HttpSessionListener的Listener类,但我无法重定向到新页面,因为在普通侦听器中没有响应对象(response.sendRedirect(“login.jsp”))。

感谢,Jampanna

2 个答案:

答案 0 :(得分:1)

你不能这样做。至少不像你想象的那么容易。

如果会话过期,则表示在会话超时期间没有来自客户端浏览器的请求。如果用户关闭浏览器窗口或上厕所等,服务器甚至不知道。

HttpSessionListener是仅服务器端事件,没有客户端请求。它表示在过去30分钟内没有客户端请求该会话(如果会话超时为30分钟)。

因此,您无法将浏览器窗口重定向到其他网站。

作为替代方案,您可以经常从客户端的浏览器进行轮询。但这意味着,如果用户导航到另一侧或关闭浏览器,服务器端会话将只会到期。为避免这种情况,您可以实现自己的会话超时。在每个轮询请求中,您可以确定上次“真实”请求的时间(表示没有轮询请求),然后重定向到登录页面并手动关闭会话。

另一种选择是使用websockets作为后向通道。

答案 1 :(得分:0)

使用Spring Security Framework,它拥有应对会话结束/重新登录案例的所有机制

或者你可以使用javascript重定向到login.jsp,比如

function redirectToLogin(){ document.location = '/login.jsp' }

setTimeout( redirectToLogin, 300 );

这可能仅适用于非常简单的webapps。对于RIA,您必须通过请求服务器来检查会话状态