当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对象发起的而不
这里模仿jquery的处理方式实现webix的ajax请求session超时跳转。 具体的做法: 1、查看webix.js源码发现webix.ajax只有请求前的监听函数 “onBeforeAjax”, 要做到获取返回状态跳转登录页面必须要有个返回的监听...
主要介绍了重写 ajax 实现 session 超时跳转到登录页面实例代码,需要的朋友可以参考下
如果session超时,而且是ajax请求,就会在响应头里。再用一个全局的方法来处理,session超时要跳转的页面
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象
主要介绍了登录超时给出提示跳到登录页面(ajax、导入、导出)的相关资料,需要的朋友可以参考下
当ajax返回的时候,就是 代码如下: sucess:function()... 您可能感兴趣的文章:ajax动态为a标签href赋值不执行跳转的原因分析及解决ajax提交session超时跳转页面使用全局的方法来处理ajax如何实现页面局部跳转与结果返回
12.5.1 页面的跳转 196 12.5.2 隐性调用PHP程序 196 12.6 JavaScript和PHP的综合实例——表单 12.6 验证 197 12.6.1 表单设计 197 12.6.2 JavaScript代码设计 199 12.6.3 PHP代码设计 200 12.6.4 代码的运行 201 ...
1.5. Seam 页面流:猜数字范例........................................................................................................................................ 40 1.5.1. 理解代码....................