解决ajax请求过滤器重定向不跳转
来源:互联网 发布:美国经济数据日历 编辑:程序博客网 时间:2024/06/08 09:51
最近写的一个servlet过滤器,用于拦截请求,判断用户是否登录。
写好后发现一个问题,当我直接在浏览器地址栏里输入地址,可以跳转页面;当点击按钮时,过滤器代码正常执行,但是页面没有跳转;是因为按钮都是ajax请求,默认ajax是不支持重定向的,因为ajax本身就是局部刷新,不会重新加载页面的。所以需要在过滤器里再加个ajax请求判断,然后找个前台公共js加一个方法。上代码
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws ServletException, IOException {HttpServletRequest request = (HttpServletRequest)servletRequest;HttpServletResponse response = (HttpServletResponse)servletResponse;String currentURL = request.getRequestURI();String ctxPath = request.getContextPath();//除掉项目名称时访问页面当前路径String targetURL = currentURL.substring(ctxPath.length());HttpSession session = request.getSession(false); String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ ctxPath; String type = request.getHeader("X-Requested-With")==null?"":request.getHeader("X-Requested-With");// XMLHttpRequest if (currentURL.endsWith(".js") || currentURL.endsWith(".css") || currentURL.endsWith(".png") || currentURL.endsWith(".jpg")) {//这里表示如果是静态文件,则进行正常的页面跳转filterChain.doFilter(request, response);return;} else {String url = targetURL.substring(targetURL.lastIndexOf('/'));//对当前页面进行判断,如果当前页面不为登录页面if(!(signin_page.equals(targetURL) || signin.equals(url))){System.out.println("1---"+targetURL+"---ctxPath:"+ctxPath+"---currentURL:"+currentURL);//在不为登陆页面时,再进行判断,如果不是登陆页面也没有session则跳转到登录页面if(session == null || session.getAttribute("user") == null){ if (StringUtils.equals("XMLHttpRequest", type)) { // 处理ajax请求 response.setHeader("REDIRECT", "REDIRECT");//告诉ajax这是重定向
response.setHeader("CONTEXTPATH", basePath+"/signin.html");//重定向地址 response.setStatus(HttpServletResponse.SC_FORBIDDEN); return; }else{ response.sendRedirect(ctxPath+signin_page); return; }}else{//这里表示正确,会去寻找下一个链,如果不存在,则进行正常的页面跳转filterChain.doFilter(request, response);return;}}else{//这里表示如果当前页面是登陆页面,跳转到登陆页面filterChain.doFilter(request, response);return;}}}
上面是java过滤器代码,添加了对于ajax请求的判断。
$.ajaxSetup( { //设置ajax请求结束后的执行动作 complete : function(XMLHttpRequest, textStatus) { // 通过XMLHttpRequest取得响应头,REDIRECT var redirect = XMLHttpRequest.getResponseHeader("REDIRECT");//若HEADER中含有REDIRECT说明后端想重定向 if (redirect == "REDIRECT") { var win = window; while (win != win.top){ win = win.top; } //将后端重定向的地址取出来,使用win.location.href去实现重定向的要求 win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH"); } } });
上面是js代码,找个公共的js,里面加入ajaxSetup方法,具体看注释。
以上,就是解决ajax请求过滤器重定向不跳转的问题。
阅读全文
1 0
- 解决ajax请求过滤器重定向不跳转
- 解决ajax请求过滤器重定向不跳转
- 解决ajax请求filter重定向失败
- 解决ajax请求filter重定向失败
- ajax请求返回的页面不跳转
- SpringMVC轻量级框架之控制器重定向跳转原理分析
- SpringMVC轻量级框架之控制器重定向跳转原理分析
- 用Ajax发请求,然后在服务器端重定向(不能达到期望的结果) 与 用浏览器直接向服务器重定向 是不同的
- ajax请求重定向
- ajax请求重定向
- easyui+rest服务,ajax请求session过期不跳转问题解决
- 解决请求重定向无法跳转以及页面无限循环跳转
- 解决ajax请求下,后台sendRedirect页面跳转无效
- 解决ajax请求下,后台sendRedirect页面跳转无效
- Ajax请求Controller跳转
- session过期ajax请求过滤
- Post形式Http请求,处理对方服务器重定向情况(303,302)
- JavaWeb Filter 过滤器的机制 与使用 请求重定向与请求转发的区别 跳转过滤,过滤器dispatcher REQUEST与FORWARD区别
- 解决springMVC中Get请求乱码的问题
- AndroidStudio的CMake开发时遇到的异常及解决方案
- Eratosthenes筛法
- 基本Makefile编写举例
- 受限玻尔兹曼机(Restricted Boltzmann Machine)分析
- 解决ajax请求过滤器重定向不跳转
- 面试总结:关于数据库范式的一点理解
- Monkey and Banana HDU
- gson解析字符串toBean
- Eclipse +Scala+Maven+Spark开发模式
- macvlan 网络结构分析
- City Skyline --(单调队列)
- centos7 防火墙使用详解
- uva10673-扩展欧几里得