filter和sessionListener实现session超时退出功能,过滤掉轮询请求
filter和sessionListener实现session超时退出功能,过滤掉轮询请求
1.requestFilter
public class RequestFilter implements Filter {HashSet<String> set = new HashSet();@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req =(HttpServletRequest) request;HttpSession session = req.getSession();String head = req.getHeader("sessionTimeOut");//System.out.println(session.getAttribute("sysTimeout"));//head为null记录时间,//不为null,如果set里面没有head,也记录当前时间//否则不记录时间//System.out.println("head:" + head);if (head == null) {long lastPostTime = System.currentTimeMillis();System.out.println("ID1:" + session.getId());session.setAttribute("lastPostTime", lastPostTime);}//记录第一次轮询时间
// else if (head != null && !set.contains(head)) {// long lastPostTime = System.currentTimeMillis();
// session.setAttribute("lastPostTime", lastPostTime);
// set.add(head);
// System.out.println("ID2:" + session.getId());
// }//System.out.println("requestLastTime:" +session.getAttribute("lastPostTime"));chain.doFilter(req, response);}@Overridepublic void destroy() {}
}
2.sessionListener
@Overridepublic void sessionCreated(HttpSessionEvent event) {HttpSession session = event.getSession();int time = 1;session.setMaxInactiveInterval(time * 60);session.setAttribute("sysTimeout",session.getMaxInactiveInterval());System.out.println(time);}public class SessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent event) {HttpSession session = event.getSession();int time = 1;session.setMaxInactiveInterval(time * 60);session.setAttribute("sysTimeout",session.getMaxInactiveInterval());//System.out.println(time);//System.out.println("lastPostTime:" + session.getAttribute("lastPostTime"));}@Overridepublic void sessionDestroyed(HttpSessionEvent event) {}
}
3.web.xml
<!--listener--><listener><listener-class>com.kuang.core.SessionListener</listener-class></listener><!-- filter的映射 --><filter><filter-name>MyFilter</filter-name><filter-class>com.kuang.core.RequestFilter</filter-class></filter><filter-mapping><filter-name>MyFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
4.loginOut接口
@RequestMapping("/sessionLoginOut")@ResponseBodypublic String sessionLoginOut(HttpServletRequest request){HttpSession session = request.getSession();//有效提交时间,是时间戳,单位毫秒long lastPostTime = (long) session.getAttribute("lastPostTime");//当前时间,是时间戳,单位毫秒long currentTime = System.currentTimeMillis();//System.out.println("now: " + currentTime);//System.out.println("last: " + lastPostTime);//系统超时时间设置,单位秒Object sysTimeout = session.getAttribute("sysTimeout");long sysTime = Long.valueOf(String.valueOf(sysTimeout));System.out.println("sys:" + sysTime);System.out.println("差:" + (currentTime - lastPostTime)/1000);if ((currentTime - lastPostTime)/1000 >= sysTime) {//session超时,返回前端session超时状态码return "1000";}return "100000";}
5.前端Ajax轮询
var sessionTimeout = setInterval("sessionLoginOut()", 1000);
function sessionLoginOut() {$.ajax({url: '/sessionLoginOut',async:false,//contentType: "application/json;charset=utf-8",//这个参数也是header参数beforeSend: function (XMLHttpRequest) {XMLHttpRequest.setRequestHeader("sessionTimeOut", "timeout");},// header:{// "sessionTimeOut": "timeout"// },type: 'post',success: function (data) {if (data === "1000") {window.location.href = "/login";clearInterval(sessionTimeout);}else {console.log(data);}}})
}
filter和sessionListener实现session超时退出功能,过滤掉轮询请求相关推荐
- java 轮询请求_使用RxJava来实现网络请求轮询功能
原标题:使用RxJava来实现网络请求轮询功能 近日有媒体报道称,腾讯重金入股永辉超市旗下生鲜超市超级物种,目前交易已经完成.受此刺激,永辉超市股价迅速涨停,午后临时停牌.若此举成行,超级物种将更有底 ...
- Android超时退出功能解决方案
一些App鉴于安全性的考虑可能需要用户长时间不操作退出登陆界面的功能,百度各种方法,但是限于本身框架原因均无法实现 我的App框架是viewPager+fragment,而且每个fragment页面还 ...
- java Servlet Filter 拦截Ajax请求,统一处理session超时的问题
后台增加filter,注意不要把druid也屏蔽了 import java.io.IOException;import javax.servlet.Filter; import javax.servl ...
- oracle设置密码复杂度、设置oracle超时退出的功能
查看oracle是否启用密码复杂度: select limit from dba_profiles where RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION' and ...
- Java中解决(extjs或jquery)session过期退出登录问题
为什么80%的码农都做不了架构师?>>> 解决两种情况下的用户访问超时: a)普通http请求的session超时: b)异步http请求的session超时,如果使用extj ...
- java 登录失效时间_详谈Java设置session超时(失效)的时间
详谈Java设置session超时(失效)的时间 免费学习推荐:java基础教程 在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁ses ...
- 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)
文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...
- Session超时管理以及Session实现自动登录——java web实验
一.Session超时管理 在实际网站用户登陆后,在浏览其他页面过程中,可能中间会有其他事情停顿,一段时间内没有对该网站页面再次发送请求访问,待到一定时间过后(即保存登陆用户信息的session超时) ...
- JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- java:退出功能_Java 8:功能VS传统
java:退出功能 业务逻辑是相同的: 给定一个由访问次数/时间组成的String表达式,例如:" 1 / 24h,1..3 / 3h,5 / *" 然后,结果应为以下字符串列表: ...
最新文章
- DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
- linux go redis,使用go来操作redis的方法示例
- DeepFaceLab 换脸
- MFC CListCtrl控件基本使用图解
- python 时间序列预测_使用Python进行动手时间序列预测
- nuxt2中使用less
- 老李说事:性能测试服务日记
- hiredis源码分析与简单封装
- Linux内核中流量控制(12)
- Integrating ASP.NET AJAX with SharePoint
- 谭浩强 C语言程序设计第五版 第六章 习题 答案
- 使用NeatUpload控件实现ASP.NET大文件上传
- 关于音频情感分类的随笔(3)
- Linux:shel脚本调试及环境问题l
- 任泽平最新演讲:从这6个周期,读懂中国经济未来走势
- python模拟鼠标键盘原理_Python-模拟鼠标键盘动作
- NAT模式、路由模式、桥接模式 区别对比
- 程序员像妹子表白专用代码
- 《天道》之丁元英的30句经典语录
- 【算法】搜索算法—盲目搜索和启发式搜索
热门文章
- easyui ajax post,实例详解EasyUI框架使用Ajax提交注册信息
- scratch3.0教程(持续更新)
- 定时器cron表达式详解
- 阿里最新分享Redis全套学习笔记PDF版,图文并茂,太详细了
- 第三篇:关于MVPArms与OKGO结合报错--mRootView为空
- OneNote2016 解决 OneNoteGem 插件 选项卡消失的问题
- 电商扣减库存_电商后台产品经理宝典
- 在VS2019 C++ 中实现Socket通信,添加ws2_32.lib静态库
- 金蝶K3 WISE所有单据数据库内码及描述对照表
- 湖北省软件行业协会会员单位全名录(2014年的信息)