session会话拦截ajax,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请求刷新浏览器

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

记一次IIS发布网站导致系统时常跳入登录页面的问题解决

服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...

随机推荐

OC宏和常量

1.通常常量的定义const放在最前面: 2.宏的定义 #define TAG_ID 101,注意:宏名称和值之间没有等号,宏定义的末尾也不需要分号

iOS 网络框架编写总结

一,常用 1> 不错的处理接收到的网络图片数据的方法 id img= ISNSNULL(pic)?nil:[pic valueForKey:@"img"]; NSString ...

关于H.264 x264 h264 AVC1

1. H.264是MPEG4的第十部分,是一个标准.对头,国际上两个视频专家组(VCEG和MPEG)合作提出的标准,两个专家组各有各的叫法,所以既叫H.264,也叫AVC. 2.x264是一个编码器, ...

codeforces B. Making Sequences is Fun 解题报告

题目链接:http://codeforces.com/problemset/problem/373/B 题目意思:给出w,m和k,需要找出从m开始,可以有多少个连续的数(m+1,m+2,...)(在添 ...

spoj 3871. GCD Extreme 欧拉+积性函数

3871. GCD Extreme Problem code: GCDEX Given the value of N, you will have to find the value of G. Th ...

js中Math()函数&&数据类型转换

Math()函数: x的y次方:Math.pow(x,y) 取小数点后两位:num.toFixed(2) 数据类型转换: 字符串转换为数字:parseInt(num)转换为整数:parseFloat( ...

Swift - 判断设备类型开发兼容的iOS应用(iPad使用分隔视图控制器)

1,分割视图控制器(UISplitViewController) 在iPhone应用中,使用导航控制器由上一层界面进入下一层界面. 但iPad屏幕较大,通常使用SplitViewController来 ...

linux安装tomcat, jdk出现的问题

1)卸载系统自带的jdk版本:     查看自带的jdk:     #rpm -qa|grep gcj     可能看到如下类似的信息:     libgcj-4.1.2-44.el5     jav ...

<Mastering KVM Virtualization>:第一章 了解Linux虚拟化

本章为读者提供了Linux虚拟化中流行技术的深刻见解,以及相较于其他同类技术的优势特点.本书共有14章,囊括了KVM虚拟化中的各个方面,从KVM的内部构造开始,并包括了诸如软件定义网络(SDN),性能 ...

JS中数组的方法

1. join() Array.join() 是 String.split() 的逆向操作 var arr = [1, 2, 3] arr.join()// "1,2,3" arr ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu下修改mysql编码,使能支持中文

通过sudo apt-get install mysql-server安装的mysql的编码是latin1,不能支持中文。 需要修改/etc/mysql/my.cnf文件,可以通过vim或者gedit进入, 找到[client] 添加:default-character-setutf8 //默认字符集为utf8 找到[mysqld]添加: default-…

php二维码存放json数据_PHP生成及获取JSON文件的方法

本文实例讲述了PHP生成及获取JSON文件的方法。分享给大家供大家参考,具体如下:首先定义一个数组,然后遍历数据表,把相应的数据放到数组中,最后通过json_encode()转化数组json_encode() 函数的功能是将数值转换成 JSON …

gsoap的几个常用设置选项

1. 服务器端设置地址重用 在soapXXXService.cpp中,在类的构造函数中增加 bind_flags SO_REUSEADDR; 2. 客户端设置连接超时时间 在soapXXXProxy.cpp中,在XXXProxy_init中增加 connect_timeout x; 3. 客户端设置请求超时时间 在soapXXXProxy.cpp中&…

post修改服务器数据源,postgresql安装及配置超详细教程

1. 安装根据业务需求选择版本,官网下载初始化数据库执行完初始化任务之后,postgresql 会自动创建和生成两个用户和一个数据库:linux 系统用户 postgres:管理数据库的系统用户;密码由于是默认生成的,需要在系…

小程序分享到朋友圈_如何给小程序添加分享朋友圈

微信公众号更新以后,推送不是按照优先来的,你们可以把我的微信公众号点击设置为星标,以便于及时的接收信息.从微信小程序官方分享朋友圈有那么几天了,今天就分享下如何给自己的小程序添加分享朋友圈代码,几行代码的事。根据官方的提示需要基础…

游戏开发第3天小结

今天是正式开始的第三天。这三天来一直在弄跟模型相关的事情,用blender来修改模型,做骨骼,蒙皮,导出到3dXchange中,再导到Iclone里去制作动作,最后导出到Unity里。简单就这样的一个工作流程。其中遇到各种头…

grep -q用于if逻辑判断

grep -q用于if逻辑判断突然发现grep -q 用于if 逻辑判断很好用。-q 参数,本意是 Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. 中文意思为,安静模式&…

iReport报表工具的使用

对于本人来说,报表工具只是刚刚接触,经过几个小时的摸索,基本的操作还是可以的。 (1)安装该工具总结 首先需要到日所安装数据库所需的驱动 工具--->选项--->classpath--->addjar(然后选中需要导入的数据库驱动…

mac远程redis_Linux:使用Mac远程(局域网内)访问Ubuntu主机上的Redis服务

1. 前言本文介绍的方法,是通过配置 Redis,在 Mac 上通过 ssh 协议访问 Ubuntu 主机的 Redis 服务;注意:如果 Ubuntu 不做 Redis 配置,Mac 直接访问 Ubuntu 的 Redis 服务时会报以下错误:Could not connect …

bbb 烧写脚本分析

ftp服务器地址,即CCS Uniflash的地址 SERVER_IP"192.168.2.1" MLO u-boot.img uImage压缩文件的名称,即ftp服务器下载目录里的文件名 BOOT_PARTITION"boot_partition.tar.gz" 文件系统的名称,即ftp服务器下载目录里的…

mysql 增量备份脚本_MySQL自动化(全量+增量)备份脚本

一、MySQL的日常备份方案:全备增量备份:1、周日凌晨三点进行全备;2、周一到周日增量备份。不是往常的周日全备份,周一到周六增量备份,这样如果周日数据库在完全备份前出问题,恢复完成后,会少周日…

JS代码大全

一、验证类 1、数字验证内 1.1 整数 /^(-|\)?\d$/.test(str) 1.2 大于0的整数 (用于传来的ID的验证) /^\d$/.test(str) 1.3 负整数的验证 /^-\d$/.test(str) 2、时间类 2.1 短时间,形如 (13:04:06) function isTime(str) …

Linux编程里getopt_long_only函数用法详解

在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子。下面介绍使用getopt_long_only和getopt_long( 两者用法差不多 )解析命令行选项。 程序中主要使用: 短选项长选项是否需要参数-n--userna…

mybatis的mysql参数传递参数_mybatis 传递参数的方法总结

有三种mybatis传递参数的方式:第一种mybatis传入参数是有序号的,可以直接用序号取得参数User selectUser(Stringname,String area);可以在xml配置文件中写select * from user_user_t where user_name #{0} and user_area#{1}#{0} 表示传递过来的第一参数 . 也就是说#{N} 就可以…

C# 数据的加密解密

/// <summary> /// 加密数据 /// </summary> /// <param name"Text"></param> /// <param name"sKey"></param> /// <returns></returns> public static string Encrypt(string Text, string sKey){DESCr…

strdup函数的用法

函数名: strdup 功 能: 将串拷贝到新建的位置处 用 法: char *strdup(char *str)&#xff1b; 这个函数在linux的man手册里解释为&#xff1a; The strdup() function returns a pointer toa new string which is a duplicate of the string s. Memory for thenew string is …

eclipse中查看mysql_eclipse中怎样查看sqlite数据库的表

string createtable(classclazz , string tablename){//实例化一个容器&#xff0c;用来拼接sql语句stringbuffer sbuffer new stringbuffer();//sql语句&#xff0c;第一个字段为_id 主键自增&#xff0c;这是通用的&#xff0c;所以直接写死sbuffer.append("create tab…

Java 泛型(一)

1&#xff0c;泛型的声明 a&#xff09;在方法中的声明&#xff1a; 现在访问修饰符后&#xff0c;返回值类型前加上<T>&#xff0c;其它字母亦可。 b&#xff09;在类中的声明&#xff1a; 在类名后加<T> 练习&#xff1a;用泛型写一个方法&#xff0c;将一个数组…

敏捷开发之Scrum扫盲篇

现在敏捷开发是越来越火了&#xff0c;人人都在谈敏捷&#xff0c;人人都在学习Scrum和XP... 为了不落后他人&#xff0c;于是我也开始学习Scrum&#xff0c;今天主要是对我最近阅读的相关资料&#xff0c;根据自己的理解&#xff0c;用自己的话来讲述Scrum中的各个环节&#x…

macos xampp mysql 命令_MAC系统XAMPP 中 MySQL命令行client配置使用

在PHP的学习过程中。MySQL预计是必定会接触的。MySQL的管理相信大家也会使用phpmyadmin&#xff1a;好吧。phpmyadmin的确是MySQL管理的神器&#xff0c;你想要的。他好多都有&#xff0c;在开发的过程中。对于后台数据库的设计架构帮助真的非常大。可是。在这篇文章的主角确不…