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超时退出功能,过滤掉轮询请求相关推荐

  1. java 轮询请求_使用RxJava来实现网络请求轮询功能

    原标题:使用RxJava来实现网络请求轮询功能 近日有媒体报道称,腾讯重金入股永辉超市旗下生鲜超市超级物种,目前交易已经完成.受此刺激,永辉超市股价迅速涨停,午后临时停牌.若此举成行,超级物种将更有底 ...

  2. Android超时退出功能解决方案

    一些App鉴于安全性的考虑可能需要用户长时间不操作退出登陆界面的功能,百度各种方法,但是限于本身框架原因均无法实现 我的App框架是viewPager+fragment,而且每个fragment页面还 ...

  3. java Servlet Filter 拦截Ajax请求,统一处理session超时的问题

    后台增加filter,注意不要把druid也屏蔽了 import java.io.IOException;import javax.servlet.Filter; import javax.servl ...

  4. oracle设置密码复杂度、设置oracle超时退出的功能

    查看oracle是否启用密码复杂度: select limit from dba_profiles where RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION' and ...

  5. Java中解决(extjs或jquery)session过期退出登录问题

    为什么80%的码农都做不了架构师?>>>    解决两种情况下的用户访问超时: a)普通http请求的session超时: b)异步http请求的session超时,如果使用extj ...

  6. java 登录失效时间_详谈Java设置session超时(失效)的时间

    详谈Java设置session超时(失效)的时间 免费学习推荐:java基础教程 在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁ses ...

  7. 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)

    文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...

  8. Session超时管理以及Session实现自动登录——java web实验

    一.Session超时管理 在实际网站用户登陆后,在浏览其他页面过程中,可能中间会有其他事情停顿,一段时间内没有对该网站页面再次发送请求访问,待到一定时间过后(即保存登陆用户信息的session超时) ...

  9. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  10. java:退出功能_Java 8:功能VS传统

    java:退出功能 业务逻辑是相同的: 给定一个由访问次数/时间组成的String表达式,例如:" 1 / 24h,1..3 / 3h,5 / *" 然后,结果应为以下字符串列表: ...

最新文章

  1. DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
  2. linux go redis,使用go来操作redis的方法示例
  3. DeepFaceLab 换脸
  4. MFC CListCtrl控件基本使用图解
  5. python 时间序列预测_使用Python进行动手时间序列预测
  6. nuxt2中使用less
  7. 老李说事:性能测试服务日记
  8. hiredis源码分析与简单封装
  9. Linux内核中流量控制(12)
  10. Integrating ASP.NET AJAX with SharePoint
  11. 谭浩强 C语言程序设计第五版 第六章 习题 答案
  12. 使用NeatUpload控件实现ASP.NET大文件上传
  13. 关于音频情感分类的随笔(3)
  14. Linux:shel脚本调试及环境问题l
  15. 任泽平最新演讲:从这6个周期,读懂中国经济未来走势
  16. python模拟鼠标键盘原理_Python-模拟鼠标键盘动作
  17. NAT模式、路由模式、桥接模式 区别对比
  18. 程序员像妹子表白专用代码
  19. 《天道》之丁元英的30句经典语录
  20. 【算法】搜索算法—盲目搜索和启发式搜索

热门文章

  1. easyui ajax post,实例详解EasyUI框架使用Ajax提交注册信息
  2. scratch3.0教程(持续更新)
  3. 定时器cron表达式详解
  4. 阿里最新分享Redis全套学习笔记PDF版,图文并茂,太详细了
  5. 第三篇:关于MVPArms与OKGO结合报错--mRootView为空
  6. OneNote2016 解决 OneNoteGem 插件 选项卡消失的问题
  7. 电商扣减库存_电商后台产品经理宝典
  8. 在VS2019 C++ 中实现Socket通信,添加ws2_32.lib静态库
  9. 金蝶K3 WISE所有单据数据库内码及描述对照表
  10. 湖北省软件行业协会会员单位全名录(2014年的信息)