java过滤器重定向_解决ajax请求过滤器重定向不跳转 (过滤器)
最近写的一个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");
}
}
});
java过滤器重定向_解决ajax请求过滤器重定向不跳转 (过滤器)相关推荐
- 解决spring-security session超时 Ajax 请求没有重定向的问题
解决spring-security session超时 Ajax 请求没有重定向的问题 参考文章: (1)解决spring-security session超时 Ajax 请求没有重定向的问题 (2) ...
- 解决Ajax请求时无法重定向的问题
解决Ajax请求时无法重定向的问题 参考文章: (1)解决Ajax请求时无法重定向的问题 (2)https://www.cnblogs.com/lgjlife/p/10445483.html 备忘一下 ...
- 解决ajax请求跨域,解决ajax请求跨域
跨域大部分需要通过后台解决,引起跨域的原因: 3个问题同时满足 才可能产生跨域问题,即跨域(协议,主机名,端口号中有一个不同就产生跨域) 下面是解决方法 方法一 // ajax请求跨域 /* *解决a ...
- php ajax session失效,PHP中解决ajax请求session过期退出登录问题
1.session过期,如果直接是url请求,或者用户在打开的系统页面中直接清除缓存及cookie信息,可直接在php的入口文件中调用以下封装的方法,进行session信息判断以及页面的跳转,如: i ...
- ajax请求提示html状态码302,快速解决ajax请求出错状态码为0的问题
今天在使用 ajax 向后台请求数据时出现错误,提示状态码为 0 ,后台采用的是 spring mvc 架构. 状态码为0是什么意思呢?查找了下,原来它意味着 (未初始化)即没有调用到send()方法 ...
- php 响应时间,PHP下解决ajax请求服务器响应时间过长问题
PHP下解决ajax请求服务器响应时间过长的办法:首先在浏览器输入测试网址,找到Networky以及ajax发送的请求:然后找到TTFB的响应时间对应的php文件,并删掉这些代码:最后将数据库loca ...
- ajax去掉session,PHP中解决ajax请求session过时退出登陆问题
一.session过时,若是直接是url请求,或者用户在打开的系统页面中直接清除缓存及cookie信息,可直接在php的入口文件中调用如下封装的方法,进行session信息判断以及页面的跳转,如: p ...
- Ajax请求成功后页面跳转
文章目录 Ajax实现页面局部刷新 Ajax请求成功后页面跳转 Ajax实现页面局部刷新 这里通过点击一个按钮,然后下面产生一段文字,而整个页面不用刷新 <!DOCTYPE html> & ...
- 前后端分离 ajax请求后台重定向
最近在做的一个前后端分离的一个项目,这就涉及到登录验证的问题.我用的是token加上filter. 1,前端请求登录的时候,用用户名和加上当前时间生成一个token,存入redis,然后返回给前端. ...
最新文章
- Java基础语法(一)注释,关键字,常量,变量,数据类型,标识符,数据类型转换...
- arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法
- BloomFilter–大规模数据处理利器(转)
- C#遍历指定文件夹中的所有文件和子文件夹
- Random随机数相关工具类
- Z字变换Python解法
- 用three.js写一个简单的3D射门游戏
- 怎么委婉地不让婆婆每天来我家?
- linux下内存的统计和内存泄露问题的定位-转
- WCF与AJAX编程开发实践(2):支持ASP.NET AJAX的Web Service
- axios的this指向_vue使用axios时this指向哪里
- StringUtil.isNotEmpty
- FbinstTool万能启动超级简单教程
- 企业管理--盖洛普Q12测评法
- 【果壳笔记】生物信息学——王秀杰老师部分
- 20170603学习笔记整理
- 【韩顺平utility工具类】
- Adaptive AUTOSAR----Adaptive studio
- Python智力问答小游戏
- python中turtle画笑脸_怎么用python实现画笑脸
热门文章
- 阿里云域名注册流程(图文教程很详细)
- html 重复显示,使用相同的JavaScript重复HTML
- 入户广州户口需要什么条件?
- 上线!Chatopera首发开源心理咨询对话语料库
- 建筑八大员考试武汉材料员考试建筑工程材料管理的强化措施
- 进宠物商店买小动物的小游戏程序
- mysql恩阳执行脚本_王新栋 | 2017京东商城-京麦平台618备战实践
- Spring MVC 控制层model.addAllAttribute()和model.addAllAttributes()方法的区别
- 中国第一程序员 求伯君
- i7+GTX1660Ti电脑安装PaddlePaddle-GPU