package com.nbw.login;
import java.util.Date;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import com.nbw.database.DBAccess;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OnLineUsersListener implements HttpSessionBindingListener {
private String userIP;
public void valueBound(HttpSessionBindingEvent arg0) {
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
HttpSession session = arg0.getSession();
String userId = arg0.getName();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
Statement stmt2 = null;
try {
conn = DBAccess.getConnection();
stmt = conn.createStatement();
String sql = "select t.userid from sys_user t where t.userid = '"+userId+"'";
rs = stmt.executeQuery(sql);
if(rs.next()){
String userid = rs.getString(1);
if(null != userid && !"".equals(userid)){
stmt2 = conn.createStatement();
String sql2 = "update sys_user t set t.STATE = '0',t.last_log_ip = null, t.STATE_CHANGE_TIME = sysdate where t.userid = '"+userid+"'";
stmt2.execute(sql2);
stmt2.close();
}
}
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (stmt2 != null) {
stmt2.close();
}
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
System.out.println("error" + e.getMessage());
}
}
}
public void setUserIP(String userIP) {
this.userIP = userIP;
}
public String getUserIP() {
return userIP;
}
}
###################################################
OnLineUsersListener onLineUsersListener = new OnLineUsersListener();
onLineUsersListener.setUserIP(remoteIP);
this.getRequest().getSession().setAttribute((String)userHash.get("userid"), onLineUsersListener);
分享到:
相关推荐
一个自己写的实现单用户登录,单点登录的监听器,一旦新用户登录将会销毁上一个登录用户的session 只需在设置session值之前调用一下重置登录这个方法 值得注意的就是,里面的判断得根据自己的项目中存的session的...
总结一下,通过使用`HttpSessionAttributeListener`,我们可以监听登录用户的会话属性,从而动态维护登录用户列表。同时,结合会话管理机制,我们可以实现踢人功能,即强制结束特定用户的会话。这种技术在多人在线...
Servlet监听器是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行代码,比如当Web应用程序启动或停止时,或者当用户会话被创建、更新或销毁时。在"jsp中监听器实现在线用户统计"这个场景下,我们...
在IT行业中,QQ登录状态监听是一项重要的技术任务,主要用于实时获取和分析用户在QQ平台上的登录情况。这一过程涉及到多个知识点,包括数据监听、网络通信协议、事件驱动编程以及隐私保护策略。以下是对这些关键点的...
本文将深入探讨如何利用Session监听器来防止同一用户在多个客户端同时登录。 首先,理解Session的基本概念至关重要。Session是服务器为每个用户创建的一种存储机制,用于保存用户状态信息。当用户登录成功后,...
在微信小程序中,监听用户登录事件对于提供个性化服务和确保用户体验流畅至关重要。本文将深入探讨如何在小程序中实现这一功能,特别是在面临用户状态全局同步、页面生命周期管理等挑战时的解决方案。 首先,我们要...
在Web开发中,确保同一用户不...总结来说,通过Java的Session监听器,我们可以有效地监控和控制同一用户在同一时间的多处登录,从而提高系统的安全性。结合数据库操作和适当的策略,可以实现复杂而灵活的并发登录控制。
1. **会话管理**:每个登录用户都会有一个会话标识,服务器会跟踪这个标识。如果用户在一段时间内没有与服务器进行交互(例如心跳检测),则可以推断用户可能已经非法退出。 2. **异常监测**:通过分析用户行为模式...
当用户登录后,服务器会创建一个Session,并将用户信息存储在其中,以便在后续的请求中识别和管理用户。而Session监听器则可以帮助我们更有效地管理和监控这些Session。 首先,我们需要了解如何定义一个Session监听...
用户登录时,调用LoginServlet,将用户名写入application的在线用户列表中,用户退出时,调用LogoutServlet,调用session.invalidate(),交给HttpSessionListener的sessionDestroyed()方法,将用户从在线列表中删除。...
2. **会话监听器**: 可以监控用户的会话状态,如检测会话超时、会话创建和销毁等,常用于实现单点登录、在线用户统计等功能。 3. **请求监听器**: 虽然Java标准API中没有直接提供请求监听器,但可以通过过滤器...
在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...
在这个范例中,我们将深入探讨如何利用监听器来统计在线人员数量以及处理用户登录事件。 首先,我们需要了解Servlet监听器的基本概念。Servlet监听器是实现了特定接口的Java类,这些接口定义了针对不同Web应用程序...
在这个场景中,我们关注的是如何利用`Session`来控制用户的重复登录以及统计在线用户数量。下面将详细介绍这两个核心知识点。 1. **重复登录控制**: 当用户成功登录后,通常会将用户的一些关键信息(如ID、用户名...
在Laravel框架中实现登录事件监听并添加登录用户记录是一项在用户登录时进行记录和监控的常见实践。通过这种方法,开发者可以捕捉到用户登录事件,并在事件发生时执行特定的业务逻辑,如在数据库中创建一条登录日志...
1. 统计在线用户:通过监听Session的创建和销毁,可以统计网站的实时在线用户数量。 2. 用户行为分析:记录用户Session的活跃时间、访问路径等,用于分析用户行为。 3. 资源管理:在Session销毁时释放占用的资源,...
这通常涉及修改系统策略脚本,以便在用户登录之前执行监听程序。监听程序运行一段时间后,会捕获并保存键盘输入,即密码,到指定的文件(如`D:\getkey.txt`)。 3. **删除新建账户**:最后,为了避免被发现,需要在...
标题提到的"J2EE 用监听器实现同一用户只能有一个在线"是指通过使用Java Servlet API中的监听器来跟踪和管理用户的登录状态,以防止同一用户同时开启多个会话。 首先,我们需要理解这个问题的背景。通常,用户登录...
- **权限控制**:监听用户登录、角色变更等事件,动态调整用户的访问权限。 总之,Windchill的事件监听机制是系统灵活性和可扩展性的重要组成部分,它允许开发者通过自定义代码响应系统内部的各种事件,从而实现...
- **监听器属性**:`username`(当前登录用户的用户名)、`homework`(当前作业名称)、`student`(待操作的学生对象)和`conn`(与数据库的连接)。 - **事件处理逻辑**: - 如果事件为“切换作业”,则调用`...