一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是ajax却是例外的,所以解决方法是设置响应为session失效。
一共分为过滤器和页面js两个部分的设置,先看过滤器的修改:
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 javax.servlet.http.httpsession; /** * 登录过滤器 * 拥有session是否失效和用户是否登录2个条件判断 * 如果是ajax请求则设置session超时 * @author merlin.ma * */ public class loginfilter implements filter{ private string redirecturl = "/login.html"; private string sessionkey = "username"; @override public void destroy() { } @override public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception { httpservletrequest req = (httpservletrequest) request; httpservletresponse rep = (httpservletresponse) response; httpsession session = req.getsession(); if( session == null || session.getattribute(sessionkey) == null){ //如果判断是 ajax 请求,直接设置为session超时 if( req.getheader("x-requested-with") != null && req.getheader("x-requested-with").equals("xmlhttprequest") ) { rep.setheader("sessionstatus", "timeout"); } else { rep.sendredirect( req.getcontextpath() + redirecturl); } }else { chain.dofilter(request, response); } } @override public void init(filterconfig filterconfig) throws servletexception { string url = filterconfig.getinitparameter("redirecturl"); string key = filterconfig.getinitparameter("sessionkey"); redirecturl = url == null? redirecturl:url; sessionkey = key == null ? sessionkey : key ; } }
代码简单,就不过多进行注释了,现在看js部分的代码。当然是基于jquery的~~
//全局的ajax访问,处理ajax清求时sesion超时 $.ajaxsetup({ contenttype : "application/x-www-form-urlencoded;charset=utf-8", complete : function(xmlhttprequest, textstatus) { var sessionstatus = xmlhttprequest.getresponseheader("sessionstatus"); // 通过xmlhttprequest取得响应头,sessionstatus, if (sessionstatus == "timeout") { // 如果超时就处理 ,指定要跳转的页面 window.location.replace("login.html"); } } });
页面加载这段js代码,然后开始调用ajax。在不登陆或者session失效的情况下,可以看到页面跳转到登录页面。
如对本文有疑问, 点击进行留言回复!!
荐 http中status状态为canceled牵扯出的ajax一些问题
网友评论