利用AJAX重写,解决session超时,ajax跳转问题
来源:互联网 发布:ubuntu anaconda安装 编辑:程序博客网 时间:2024/06/07 03:58
小弟第一次发帖,最近为了解决这个问题查了很久,终于解决了,不一定很好,各位看看吧。
因为ajax无法执行拦截器的跳转主页响应,所以跳转只能写在前台,但是为了不改动已经写好的代码,只能进行统一设置,而ajaxSetup的统一设置只是缺省设置,不太好用,因此使用ajax重写是最好的解决办法。
jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法,先判断登录在执行error函数 $.ajax=function(opt){ var _error = opt && opt.error || function(a, b){}; var _opt = $.extend(opt, { error:function(data, textStatus){ if(data.status==401){alert("登录超时,请重新登录!"); storage.clear();//清空sessionStorage(类似cookie的东西) window.location.replace("/index.html"); }else{_error(data, textStatus); }} }); _ajax(_opt); }; });如上代码,当拦截器返回false时,会执行ajax的error回调函数,因此重写的error是先判断error是不是因为session失效,是的话就跳转,不是的话再执行error函数。
顺便把拦截器贴上来吧,不知道能不能帮到大家
public class LoginInterceptor implements HandlerInterceptor { @Autowired private LoginService loginService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(">>>LoginInterceptor>>>>>>>登录校验拦截器开始执行>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); //获取请求的URL String url = request.getRequestURI(); System.out.println("------------------------------url:"+url+"------------------------------"); //设置例外url if(url.indexOf("login")>=0 || url.indexOf("menu")>=0 || url.indexOf("error")>=0){ return true; } //获取Session HttpSession session = request.getSession(); Long uid = (Long)session.getAttribute("uid"); String guid = (String)session.getAttribute("guid"); // System.out.println("uid:"+uid+"\nguid:"+guid); if (loginService == null) {//解决service为null无法注入问题 System.out.println("loginService is null!!! don't worry,we will fixed it");BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());loginService = (LoginService) factory.getBean("loginService");} try {if (uid != null) {List guidList = loginService.findGuidByUid(uid);if (guid.equals(guidList.get(0).toString())) {return true;}else{//随机验证码匹配失败的/**暂无特殊处理*/}}} catch (Exception e) {System.out.println(e.getMessage());}//session中没有信息的,跳转到主页 if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ response.setStatus(401); }else{ request.getRequestDispatcher("/index.html").forward(request, response); } return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // System.out.println(">>>LoginInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //System.out.println(">>>LoginInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } }
0 0
- 利用AJAX重写,解决session超时,ajax跳转问题
- 重写ajax实现session超时跳转到登陆页面
- Ajax请求Session超时问题
- Ajax请求Session超时问题
- ajax提交session超时跳转页面,全局
- 总结一下关于 spring-security 3 ajax session 超时首页无法跳转的问题
- 重写ajax方法实现异步请求session过期时跳转
- ajax session过期 页面跳转问题
- session超时,处理ajax请求
- session超时,处理ajax请求
- session 超时,处理ajax请求
- ajax请求session 超时处理
- Ajax请求处理Session超时
- session超时,处理ajax请求
- Ajax请求session超时解决办法
- Ajax请求超时问题
- ajax请求解决session失效的问题
- ajax阻截session跳转页面
- 半透明渲染新技术摘录
- ThreadUtils
- Codeforces 724B
- 2017年微商方向选择
- Spring加载加密后的文件,防止反编译
- 利用AJAX重写,解决session超时,ajax跳转问题
- 稳定排序和不稳定排序
- ACCP C#Windows 第三章课后5
- 盒子模型
- Android结构
- 编译+反编译+去掉jd-gui行号
- 《nodejs实战》读书笔记
- 图片根据DIV大小等比例缩放
- 关于recycleview和listview字母索引滚动的问题