import java.util.Collections;
import java.util.LinkedList;
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;
public class SessionScanner implements HttpSessionListener, ServletContextListener {
private List<HttpSession> list = Collections.synchronizedList(new LinkedList<HttpSession>());
private Object lock = new Object();
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println(session + "被创建了");
synchronized (lock) {
list.add(session);
}
}
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println(session + "被销毁了");
}
public void contextInitialized(ServletContextEvent sce) {
Timer timer = new Timer();
timer.schedule(new MyTimerTask(list, lock), 0, 1 * 60 * 1000);
}
public void contextDestroyed(ServletContextEvent sce) {
}
}
class MyTimerTask extends TimerTask {
public List list;
private Object lock;
public MyTimerTask(List list, Object lock) {
this.list = list;
this.lock = lock;
}
public void run() {
synchronized (lock) {
ListIterator it = list.listIterator();
while (it.hasNext()) {
HttpSession session = (HttpSession) it.next();
if ((System.currentTimeMillis() - session.getLastAccessedTime()) > 1 * 60 * 1000) {
session.invalidate();
it.remove();
}
}
}
}
}
分享到:
相关推荐
此外,考虑到用户体验,你还可以自定义扫描界面,避免弹出扫描仪的默认界面。 总的来说,C#结合Twain协议为开发者提供了一种高效且灵活的方式来控制扫描仪。通过学习和实践,你可以创建自己的图像获取应用,满足...
- 自定义Session扫描器:分析Session内对象的变化,实现特定业务逻辑。 9. **面试题与知识点** - 过滤器的作用和用法:包括但不限于字符编码转换、权限控制、数据过滤等。 - web.xml的作用:是Java Web应用的...
本文将详细介绍如何在iOS中自定义实现二维码生成器和扫描器,并探讨第三方库的使用。 首先,我们要了解二维码的基本原理。二维码(Quick Response Code)是一种二维条形码,能存储比传统条形码更多的信息,包括文字...
在iOS 7中,苹果引入了内置的二维码(QR Code)扫描功能,使得开发者能够方便地集成这一特性到自己的应用程序中,为用户提供...在实际开发中,还可以结合其他UI组件,如按钮和指示器,以完善整个扫描流程的交互设计。
在这里,我们设置了元数据类型为`.qr`,意味着我们的扫描器只会关注二维码。 为了接收到扫描结果,你需要遵循`AVCaptureMetadataOutputObjectsDelegate`协议,并实现`captureOutput(_:didOutput:from:)`方法: ```...
以下是一个基本的二维码扫描器实现: ```swift import AVFoundation class QRScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { var captureSession: AVCaptureSession? var ...
在iOS开发中,"拍照器扫描"涉及到的主要技术点包括使用UIImagePickerController来实现相机功能,以及对扫描和图像处理的相关操作。下面将详细讲解这些知识点。 首先,`UIImagePickerController`是苹果提供的一个...
此外,为了提高用户体验,可以添加动画效果,比如当扫描到二维码时显示一个成功的指示器。 以上就是使用AVFoundation框架在iOS中实现二维码扫描的基本步骤。这个过程可以进一步扩展,例如支持多种类型的条形码,...
NTKO附件管理控件(多文件上传下载在线编辑扫描控件)是拥有完全独立...★ 支持直接从扫描仪输入文件[需要购买扫描支持模块] 通过AddFromScanner方法,控件支持从扫描仪中直接扫描图片到控件中。[需要购买扫描支持模块]
打开注册表编辑器(regedit),导航到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager`。 - 找到`BootExecute`键值,双击打开,将内容改为`autocheck autochk *`(如果没有,可以新建一个...
在iOS中,创建一个扫码视图控制器: ```swift import ZXingObjC class QRScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { var captureSession: AVCaptureSession? ...
这个项目"QRCodeByAVFoundation"是基于Swift语言和Apple的AVFoundation框架实现的一个二维码扫描器的示例。AVFoundation是苹果提供的一套强大的多媒体处理框架,它包含了音频、视频、图像处理等功能,其中的...
提供自定义的认证过滤器和拦截器,确保用户请求的安全性。 2. 权限管理 定义了详细的权限资源,包括页面权限、按钮权限和数据权限。 通过自定义注解Auth标记需要权限控制的接口和方法。 在应用启动时自动扫描并...
然后,在需要使用扫描功能的控制器中引入头文件,并实例化`QRCodeScanView`,设置其frame以覆盖期望的扫描区域。 ```swift import QRCodeScanView class ViewController: UIViewController { let scanView = ...
本文将详细介绍如何通过编写自定义拦截器以及在Spring MVC项目中进行必要的配置来实现这一功能。 #### 自定义拦截器:`SessionInterceptor` 首先,我们需要创建一个自定义拦截器`SessionInterceptor`来检查当前...
在iOS平台上,二维码生成器是一种应用工具,它允许用户创建自定义的二维码,这些二维码可以包含各种信息,如文本、网址、联系人信息、Wi-Fi网络设置等。本篇文章将深入探讨二维码技术以及如何在iOS上开发一个二维码...
8. **会话管理**:Shiro提供了会话管理功能,如果需要自定义session存储机制,如Redis、Memcached,可以通过实现SessionDAO接口并配置到SecurityManager中。 9. **测试验证**:通过模拟用户登录、访问受保护资源等...
SNMP探测器可能包含多个这样的功能,比如批量获取设备信息、定时扫描网络、存储和分析结果等。`SnmpDetect`可能是一个包含这些功能的项目或类名,里面可能有不同方法分别处理不同的SNMP操作。 通过深入学习SNMP4J库...
打开注册表编辑器(regedit),然后导航到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager`,找到`BootExecute`键值,这里存储了系统启动时执行的命令。 3. **取消自动磁盘扫描**: - 如果...