当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面;但是ajax请求就会有问题:如果是ajax类型的弹出框则会在弹出框中显示跳转的指定页面,如果是正常ajax请求,则可能会显示源代码等。
我们需要做的是通过一个过滤器,判断是否是超时的ajax的请求进行一些特殊的处理。
package org.zhuc.common.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; /** * @author zhuc * @version 2013-3-16 下午5:51:00 */ public class SessionFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServletResponse = (HttpServletResponse) response; // if (httpServletRequest.getSession().getAttribute("user") == null) { if (!SecurityUtils.getSubject().isAuthenticated()) { //判断session里是否有用户信息 if (httpServletRequest.getHeader("x-requested-with") != null && httpServletRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { //如果是ajax请求响应头会有,x-requested-with httpServletResponse.setHeader("sessionstatus", "timeout");//在响应头设置session状态 return; } } chain.doFilter(request, response); } @Override public void destroy() { } }
这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;
这个过滤器的位置在web.xml中一般来说应该是位于最下面的,它是该最后执行的过滤器。
再用一个全局的方法来处理,session超时要跳转的页面。
jquery 可以用$.ajaxSetup 方法,ext也有类似的方法
//全局的ajax访问,处理ajax清求时sesion超时 $.ajaxSetup({ contentType:"application/x-www-form-urlencoded;charset=utf-8", complete:function(XMLHttpRequest,textStatus){ //通过XMLHttpRequest取得响应头,sessionstatus, var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); if(sessionstatus=="timeout"){ //如果超时就处理 ,指定要跳转的页面 window.location = "<c:url value="/" />"; } } });
这里让他自动跳转 / 下,即web项目根目录,通过其他权限过滤器自然就会跳转到指定页面了。
相关推荐
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不
后端过滤器负责检测并处理Session超时,前端通过监听Ajax错误事件,捕获302状态码并模拟页面跳转,确保无论用户是通过常规链接还是Ajax请求,一旦Session超时都能被正确引导到登录页面。这种做法不仅维护了用户操作...
总结来说,处理AJAX请求时的Session超时问题,主要分为两步:一是服务器端检测并标记Session超时,二是客户端监听响应并根据标记进行页面跳转。这种方法可以确保无论用户何时何地发起AJAX请求,一旦Session超时,都...
总结来说,实现Webix+Spring MVC环境下Session超时跳转登录页面的关键在于,前端扩展Webix的Ajax请求处理,添加对Session超时的检查,并在检测到超时后使用JavaScript进行页面重定向;后端则需在Spring MVC的拦截器...
当Session超时,服务器会清除相关的Session数据,并在后续的请求中告知EXT前端。 此外,为了提供更好的用户体验,一些应用会选择在Session即将到期时提醒用户,而不是突然跳转到登录页。这可以通过在后台定期发送...
总结来说,处理Ajax请求中的Session超时问题,需要服务器端能够识别并标记超时的Ajax请求,同时客户端需要能够正确响应并处理这些标记。这样的设计既保持了用户体验的连续性,又确保了系统的安全性。在实际项目中,...
解决Session超时的问题,需要对所有的/web/请求进行登录拦截,Session超时时跳转到登录页面。可以通过配置Session超时时间来实现这一点。在项目的web.xml中可以进行配置,如下: <!-- 设置Session超时时间 --> ...
如果Session已经过期,我们可以设置响应的状态,对于Ajax请求,可以设置超时状态;对于普通页面请求,可以返回一个提示信息,并重定向到登录页面。例如: ```java public class SessionFilter implements Filter { ...
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象
3. **定期刷新session**:设置合理的session超时时间,并在用户活动时更新session的最后活跃时间,提高安全性。 综上所述,跨域共享session涉及到多个技术层面,包括浏览器限制、服务器配置、前端处理和安全措施。...
本文将详细介绍如何实现登录超时后给出提示并跳转到登录页面,主要涉及Ajax提交、过滤器(Filter)以及数据导入导出等相关技术。 一、登录超时验证过滤器 在Java Web应用中,我们可以使用Servlet的Filter接口来...
每次用户请求页面时,服务器会检查这个Session ID来识别用户的身份。当设置的超时时间内没有新的请求,服务器则认为用户已经离线,清除其Session数据,实现自动登出。 在ThinkPHP5.0框架中,我们可以利用内置的...
在这个版本中,对于AJAX请求,我们将返回一个包含`logoff`标志和`logurl`属性的对象,前端接收到这些数据后可以自己决定如何处理登录超时的情况,比如显示一个模态框或者直接跳转。 总的来说,Asp.net MVC中实现...
在用户请求每个页面之前,检查其session是否有效,无效则跳转到登录页面。对于可能存在的并发登录问题,可以通过记录用户的登录状态,一旦检测到新的登录尝试,就强制登出旧的会话。 最后,关于在线支付,这是一个...
当检测到`sessionstatus`为"timeout"时,显示提示信息并重定向用户到登录页面: ```javascript Ext.Ajax.on('requestcomplete', checkSessionStatus, this); function checkSessionStatus(conn, response, options...
当ajax返回的时候,就是 代码如下: sucess:function()... 您可能感兴趣的文章:ajax动态为a标签href赋值不执行跳转的原因分析及解决ajax提交session超时跳转页面使用全局的方法来处理ajax如何实现页面局部跳转与结果返回