session过期,拦截ajax请求并跳转登录页面
1.方法一 :1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException { HttpServletResponse hresponse = (HttpServletResponse)response;
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response); String logonStrings = config.getInitParameter("logonStrings"); // 登录登陆页面
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 没有登陆转向页面
String disabletestfilter = config.getInitParameter("disabletestfilter");// 过滤器是否有效
String reString = hrequest.getRequestURI();
if (disabletestfilter.toUpperCase().equals("Y")) { // 过滤无效
chain.doFilter(request, response);
return;
}
// User user = ( User ) hrequest.getSession().getAttribute("user");//判断用户是否登录
String session_key = (String) hrequest.getSession().getAttribute("token");
String username = (String) hrequest.getSession().getAttribute("username");
if ("".equals(session_key) || session_key == null) {
String[] logonList = logonStrings.split(",");
if (this.isContains(reString, logonList)) {// 对登录页面不进行过滤
chain.doFilter(request, response);
return;
}else{
request.setAttribute("username", null);
boolean isAjaxRequest = this.isAjaxRequest(hrequest);
if (isAjaxRequest) {
//系统的根url
chain.doFilter(request, response);
return;
}
wrapper.sendRedirect(redirectPath);
return;
}
}else {
if(username !=null || username .equals("")) {
Pattern pattern = Pattern.compile("/iad/");
Matcher matcher = pattern.matcher(reString);
Pattern pattern1 = Pattern.compile("/iad/views/login/login.jsp");
Matcher matcher1 = pattern1.matcher(reString);
if(matcher.matches() ||matcher1.matches()){
wrapper.sendRedirect("/iad/views/home/index.jsp");
return;
}else {
chain.doFilter(request, response);
return;
}
}else{
boolean isAjaxRequest = this.isAjaxRequest(hrequest);
if (isAjaxRequest) {
chain.doFilter(request, response);
return;
}
Pattern pattern = Pattern.compile(".*\\/views\\/login\\/login\\.jsp");
Matcher matcher = pattern.matcher(reString);
Pattern pattern2 = Pattern.compile(".*\\/oms/");
Matcher matcher2 = pattern2.matcher(reString);
// 是否是登陆页面
if (matcher.matches() || matcher2.matches()) {
request.setAttribute("username", username);
wrapper.sendRedirect("/iad/views/home/index.jsp");
return;
}
chain.doFilter(request, response);
return;
} } }
判断是否为ajax
public static boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header))
return true;
else
return false;
}
1.2 全局js代码 可以抽取公共js 引入到你想要的页面
$.ajaxSetup( {
type: "POST" , // 默认使用POST方式
headers: { // 默认添加请求头
"Author": "CodePlayer" ,
"Powered-By": "CodePlayer"
} ,
error: function(xhr, textStatus, errorMsg){ // 出错时默认的处理函数
var sessionStatus = xhr.getResponseHeader('sessionstatus');
if(sessionStatus == 'timeout') {
var top = getTopWinow();
var ids=layer.alert("导入成功!");
window.location.href = "/iad/veiws/login/login.jsp";
}
}
} );
总结: 这种方法的有个问题,就是ajax里面的error方法是一定走的, 提醒信息会出现两次
方法二:使用js定时器对前台的session进行查询(前提是你要将这个js放到公共页面)
@ResponseBody
@RequestMapping("/loginCheck")
public Boolean loginCheck(HttpServletRequest request, HttpServletResponse response) { String session_key = (String) request.getSession().getAttribute("token");
String username = (String) request.getSession().getAttribute("username");
if (session_key == null || username == null) {
response.setHeader("sessionstatus", "timeout");
return false;
}
return true;
}
var timeid=window.setInterval("checkSession()", 1000);
checkSession= function () {
$.ajax({
url: "../../loginCheck",
type: "POST",
dataType: "json",
success: function (result) {
if (result != true) {
window.clearInterval(timeid);
Ewin.alert({message: "由于您长时间没有操作, session已过期, 请重新登录"}).on(function (e) {
window.location.href = "/iad/veiws/login/login.jsp";
})
}
}
});
};
总结:这个方法可以将定义时间延长可以两秒查一次,确定是首先1.你的系统要有公共的页面,2.定时查询可能导致系统变慢
session过期,拦截ajax请求并跳转登录页面的更多相关文章
- session过期时ajax请求刷新浏览器
ajax前置处理实现异步请求session过期时跳转登录页面 function checkLogin(json) { if (typeof(json) === 'string' && ...
- shiro session过期后ajax请求跳转(转)
配置了 Shrio框架,session也集成进去了 ,发现问题session会话过期,点击页面,一直请求失败.本来想集成拦截器,过滤器,但是已经用了shiro框架,sessionDestroyed 方 ...
- session超时跃出iframe并跳到登陆页面(转载)
session超时跳出iframe并跳到登陆页面 在网页编程时,我们经常需要处理,当session过期时,我们要跳到登陆页面让用户登陆,由于我们可能用到IFrame框架,所以我们我登陆页面需要显示在整 ...
- 重写ajax方法实现异步请求session过期时跳转登录页面(转)
一般我们会在过滤器里判断登录状态,如果没登录就跳转登录页面,过滤器java核心代码如下: UserItem loginUser = (UserItem)request.getSession().get ...
- MOCK.JS 生成随机数据,拦截 Ajax 请求
mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...
- Mock拦截ajax请求
//mock拦截ajax请求 ,生成随机数据Mock.mock('./servlet/UserServlet?method=getUser',{ 'list|1-5':[{ 'username':'@ ...
- 登录超时,给出提示跳到登录页面(ajax、导入、导出)
一.一般页面登录超时验证,可以用过滤器filter,如下: package com.lg.filter; import java.io.IOException; import javax.servle ...
- 详解springmvc控制登录用户session失效后跳转登录页面
springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下: 第一步,配置 web.xml <session-config> <session-timeo ...
- 记一次IIS发布网站导致系统时常跳入登录页面的问题解决
服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...
随机推荐
- 功能------常用快捷键(在win10下)
功能------win10 常用快捷键 在进行学习,记录,编写代码时,需要用到一些功能,用鼠标浪费时间,可以使用快捷键来快速的处理.方便操作. 以下内容分为两类.快捷键以及触控板类(不能享用鼠标) 快 ...
- SQL Server中使用表值函数
函数有很多限制,不能使用动态语句,不能使用临时表等等...细看一下,直接写语句就行了,不用动态语句 insert into @re select id,parid,@I from videoclass ...
- jQuery操作<input type="radio">
input type="radio">如下: <input type="radio" name="city" value=&qu ...
- java反射实现接口重试
工具类: import java.lang.reflect.Method; public class RetryUtil { private static ThreadLocal<Integer ...
- ASP.NET Url 重写
protected void Application_BeginRequest(object sender, EventArgs e) { string url = Request.AppRelati ...
- ubuntu上安装redis
1.Redis简要介绍 访问Redis官方网站 https://redis.io/ 上面介绍到 ,redis是开源,BSD许可,高级的key-value存储系统,可以用来存储字符串,哈希结构,链表,集 ...
- Tomcat配置JVM参数步骤
这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...
- PHP错误日志和内存查看
1.通过命令查看服务器上一共开了多少的 php-cgi 进程: ps -fe |grep "php-fpm"|grep "pool"|wc -l 2.查看FPM ...
- Jquery实现form表单提交后局部刷新页面的多种方法
最近做一个小项目,刚好需要用到搜索功能,实现搜索框内输入数据然后按回车或者点击“提交”,然后给后台数据库处理并返回数据给前端,在前端局部更新数据. 但是遇到了一个小问题,就是form表单下任意输入框输 ...
- Vue2.0项目打包后只能访问首页,其他页面路径错误找不到
原因是你使用了vue-router的history,可以尝试去掉 // mode:"history",