博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义session扫描器精确控制session销毁时间--学习笔记
阅读量:5896 次
发布时间:2019-06-19

本文共 2554 字,大约阅读时间需要 8 分钟。

package cn.xijie.listener;import java.util.ArrayList;import java.util.Collections;import java.util.Date;import java.util.List;import java.util.ListIterator;import java.util.Timer;import java.util.TimerTask;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;//HttpSession扫描器public class SessionScanner implements ServletContextListener,HttpSessionListener{    private List
sessionList = new ArrayList
(); //线程安全 private Timer timer = new Timer(); public SessionScanner(){ //将线程不安全的List转换成线程安全的List sessionList = Collections.synchronizedList(sessionList); } //ServletContext产生 public void contextInitialized(ServletContextEvent sce) { timer.schedule(new SessionTask(this.sessionList),0,1*1000); } //HttpSession产生 public void sessionCreated(HttpSessionEvent se) { //取得客户端产生的HttpSession HttpSession session = se.getSession(); System.out.println("HttpSession产生" + session.hashCode() + new Date().toLocaleString()); synchronized (sessionList) { //将HttpSession加入到容器中 this.sessionList.add(session); } } //ServletContext销毁 public void contextDestroyed(ServletContextEvent sce) { timer.cancel(); } //HttpSession销毁 public void sessionDestroyed(HttpSessionEvent se) { HttpSession session = se.getSession(); System.out.println("HttpSession销毁" + session.hashCode() + new Date().toLocaleString()); }}//任务类class SessionTask extends TimerTask{ private List
sessionList; public SessionTask(List
sessionList) { this.sessionList = sessionList; } public void run() { System.out.println("run()"); //迭代集合 //Iterator
it = sessionList.iterator(); synchronized (sessionList) { ListIterator
it = sessionList.listIterator(); while (it.hasNext()) { HttpSession session = it.next(); //判段HttpSession是否1分钟未被使用 int middle = (int) ((System.currentTimeMillis() - session .getLastAccessedTime()) / 1000); if (middle > 60) { //将该HttpSession销毁 session.invalidate(); //从集合中删除该HttpSession ....有可能出现并发问题 //sessionList.remove(session); it.remove(); } } } }}

run()

HttpSession产生6027721002018-4-20 14:47:32
run()
)
run()
run()
run()
HttpSession销毁6027721002018-4-20 14:48:45
run()

转载于:https://blog.51cto.com/357712148/2105761

你可能感兴趣的文章
《大数据分析原理与实践》一一 3.2 关联规则分析
查看>>
Fast通道获得Win10 Mobile Build 14977更新
查看>>
GAN专题阅读小组 | 每周一起读 #05
查看>>
Windows 10 安全新特性保障现代企业安全,掌握创新场景机遇
查看>>
AMD与天津海光合资生产x86服务器芯片
查看>>
提升CRM实施成功率
查看>>
雅虎开源了TensorFlowOnSpark
查看>>
ERP实施应立足于两点
查看>>
网络安全保险在欧洲更受欢迎
查看>>
三星未及时提供系统更新 荷兰消协把它告上法庭
查看>>
如何处理IT事件管理以避免混乱
查看>>
投资半导体产业不能只想赚快钱
查看>>
物联网确保消费者隐私安全 才能起飞
查看>>
iPhone升級iOS 10变砖 可用iTunes恢复
查看>>
揭秘使用免费WiFi的真实代价
查看>>
思科:网络可见化仍然是安全的数字化转型改造的关键
查看>>
CloudCC CRM梳理CRM软件已经实现的发展
查看>>
《交互式程序设计 第2版》一2.3.2 数组
查看>>
移动互联网金融app 存在信息安全问题
查看>>
Android 开发中使用 SQLite 数据库
查看>>