实现Spring拦截器拦截ajax请求并重定向
来源:互联网 发布:淘宝卖家电话人工服务 编辑:程序博客网 时间:2024/06/02 13:12
首先,实现拦截器的操作很简单,只要按部就班即可 :
public class LoginInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object user = request.getSession().getAttribute("login"); String k = request.getServletPath(); if (!k.equals("/admin/login.do")) { String type = request.getHeader("X-Requested-With");// XMLHttpRequest if (user == null) { // 重定向 String path = request.getContextPath(); String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/"; //response.sendRedirect(contextPath+"/index.jsp"); // System.err.println("sendRedirect"); // 转发 if (StringUtils.equals("XMLHttpRequest", type)) { // ajax请求 response.setHeader("SESSIONSTATUS", "TIMEOUT"); response.setHeader("CONTEXTPATH", basePath+"index.jsp"); response.setStatus(HttpServletResponse.SC_FORBIDDEN);//403 禁止 return false; } else { response.sendRedirect(basePath+"index.jsp"); return false; } } return true; } return true; }}
继承这个拦截器的类就可以了 重写方法 然后在配置文件中加上:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="main.java.com.hdd.core.Interceptor.LoginInterceptor"> </bean> </mvc:interceptor></mvc:interceptors>这个bean的位置就是你实现拦截器的位置
要说明的地方就是拦截器的实现中 ,如果直接使用response的重定向方法去重定向 那么一定会失败 因为用的是ajax ajax是异步数据 不会刷新网页 所以自然也不会去跳转页面 , 这个也算是一个使用不方面的地方吧 。所以需要改造一下ajax
选一个你的页面里都引入的js 或者是你用需要拦截ajax请求的界面 加入如下代码:
$.ajaxSetup( {//设置ajax请求结束后的执行动作 complete : function(XMLHttpRequest, textStatus) {// 通过XMLHttpRequest取得响应头,sessionstatus var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); if (sessionstatus == "TIMEOUT") { var win = window; while (win != win.top){ win = win.top; } win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH"); } }});ajaxSetup就是为了给ajax升级所预留的这样一个方法 然后complete函数就是ajax执行完后要执行的函数 无论是成功还是失败都要执行
在代码中可以看出 拦截器先获取了请求的头信息 如果是没有任何东西的 那么就是传统的同步请求 如果是XMLHttpRequest 就是ajax的异步请求 那么就在响应的头信息中放两个参数 用于ajax接受到后去执行
最后一点 这种方式的重定向 会让页面先弹出来一瞬间 然后再被重定向的页面所覆盖 让重定向的页面变为最高层级
阅读全文
0 0
- 实现Spring拦截器拦截ajax请求并重定向
- struts2的拦截器拦截ajax请求
- spring实现拦截登录请求
- IE浏览器html post拦截并重定向
- shiro 拦截器实现session过期拦截ajax请求的处理
- filter 拦截ajax请求
- 拦截ajax请求
- filter 拦截ajax请求
- 拦截ajax请求 filter
- filter 拦截ajax请求
- Spring Boot实现一个监听用户请求的拦截器
- springmvc 拦截器区分ajax请求
- ajax跨域cors请求拦截器
- Spring中使用Interceptor拦截器拦截请求
- spring mvc 拦截器拦截 js,css等请求,
- spring 拦截器的实现
- spring 拦截器的实现
- spring 拦截器的实现
- 使用高版本IDE开发+生成小exe/dll
- js中arguments.length的意思
- visual studio 2010 附加到进程 ctrl+alt+p 快捷键失效问题
- JAVA规则引擎 -- Drools
- MySQL各存储引擎
- 实现Spring拦截器拦截ajax请求并重定向
- Swift学习笔记(10)——控制流
- angular设置页面路由及seo问题
- Rn学习
- 学习廖大的JS--第二节
- __metaclass__
- 记一次MySQL中Waiting for table metadata lock的解决方法
- 辗转相除法
- react-redux的简单使用