在login后,向session中加入userBean
request.getSession().setAttribute("userBean", userBean);
1.web.xml
<!-- 加载session监听 -->
<listener>
<listener-class>com.free.common.MySessionListener</listener-class>
</listener>
2.MySessionListener.java
package com.free.common;
import java.util.*;
import java.util.Map.*;
import javax.servlet.http.*;
import com.free.pojo.*;
public class MySessionListener implements HttpSessionListener, HttpSessionAttributeListener{
// 保存sessionID和userBean的映射 key-sessionId
private static Map<String, TUser> userMap = new HashMap<String, TUser>();
private static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();
public MySessionListener(){
}
/** 以下是实现HttpSessionListener中的方法 **/
public void sessionCreated(HttpSessionEvent se) {
}
public void sessionDestroyed(HttpSessionEvent se) {
String sessionId = se.getSession().getId();
TUser userBean = (TUser) se.getSession().getAttribute(Common.CONSTANT_USER);
if(null == userBean){
return;
}
String username = userBean.getUsername();
userMap.remove(username);
sessionMap.remove(sessionId);
}
/** 以下是实现HttpSessionAttributeListener中的方法 **/
public void attributeAdded(HttpSessionBindingEvent se) {
if(Common.CONSTANT_USER.equals(se.getName())) {
TUser userBean = (TUser) se.getSession().getAttribute(Common.CONSTANT_USER);
String sessionId = se.getSession().getId();
String username = userBean.getUsername();
userBean.setSessionId(sessionId);
/**
* 踢掉已经存在的用户
*/
TUser ub1 = userMap.get(username);// 已经存在的用户
if(null != ub1 && ub1.getUsername().equals(userBean.getUsername())){
singleLogin(ub1.getId());
}
userMap.put(username, userBean);
sessionMap.put(sessionId, se.getSession());
}
}
public void attributeRemoved(HttpSessionBindingEvent se) {
}
public void attributeReplaced(HttpSessionBindingEvent se) {
}
/**
* 描述:singleLogin 单点登录-踢掉之前的用户
* @CreateOn Jul 26, 2011 9:20:04 PM
* @author chun_chang
*/
public static void singleLogin(String userId) {
clearUserById(userId);
}
/**
* 描述:clearUserById 清空同一在线用户的session
* @param userId
* @CreateOn Jul 25, 2011 11:05:44 AM
* @author chun_chang
*/
public static void clearUserById(String userId) {
Map<String, TUser> tempMap = new HashMap<String, TUser>();
tempMap.putAll(userMap);
Iterator<Entry<String, TUser>> iter = tempMap.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry<String, TUser> entry = (Map.Entry<String, TUser>) iter.next();
TUser userBean = entry.getValue();
if(userId.equals(userBean.getId())) {
String sessionId = userBean.getSessionId();
HttpSession session = sessionMap.get(sessionId);
session.removeAttribute(Common.CONSTANT_USER);
session.invalidate();
sessionMap.remove(sessionId);
}
}
}
}
相关推荐
2. **HttpSession监听器**: - `HttpSessionListener`接口:用于监听HttpSession的创建和销毁事件。`sessionCreated`方法在新的HttpSession被创建时调用,`sessionDestroyed`方法在HttpSession失效或被显式地销毁时...
例如,当一个新的会话创建时,会触发HttpSession监听器的`sessionCreated()`方法。监听器分为三类: 1. **ServletRequest监听器**:监控HTTP请求,可以获取请求的详细信息。 2. **HttpSession监听器**:关注会话的...
监听器通常分三类:基于 Servlet 上下文的 ServletContex 监听、基于会话的 HttpSession 监听和基于请求的 ServletRequest 监听。 ServletContext 监听器是基于 Servlet 上下文的监听器,存在范围是整个 Servlet ...
事件监听器可以分为三类:ServletContext 监听器、HttpSession 监听器和 ServletRequest 监听器。它们可以监听 Servlet 事件,如 Servlet 初始化、销毁、请求和响应等。 在 Web 应用程序中,事件监听器和过滤器可以...
5. **监听器(Listener)**:源码可能包含对ServletContext、ServletRequest和HttpSession监听器的实现,这些监听器可以在特定事件发生时自动执行代码。 6. **JSP基础**:JSP页面的源码会演示如何在HTML中嵌入Java...
你需要知道如何配置和实现它们,例如字符编码过滤器、登录验证过滤器、HttpSession监听器等。 6. **会话管理**:理解和掌握如何在Web应用中创建、跟踪和销毁session,以及session超时和安全性相关的策略。 7. **...
7. **性能优化**:为了提高系统的响应速度,JSP支持缓存技术,例如使用Servlet的HttpSession监听器来缓存频繁访问的数据。同时,还可以结合使用Java的EJB(Enterprise JavaBeans)或Spring框架进行服务层的优化。 8...
源码可能包含了这两个组件的使用,例如登录验证Filter或HttpSession监听器。 10. **MVC架构**:模型-视图-控制器模式在J2EE开发中常见,源码可能使用Struts、Spring MVC或自定义的框架实现这一模式。 11. **Spring...
在实际实现中,可以使用Spring框架的HttpSession监听器或者自定义Filter来管理session。当用户发送消息时,需要将session ID一同发送,以便服务器识别用户并将其放入正确的消息接收队列。此外,为了保证聊天室的安全...
4. **memcached-session-manager-1.6.5.jar**:这是核心的session管理器,它实现了Servlet规范中的HttpSession监听器接口,负责将session数据序列化后存储到memcached,并在需要时反序列化。 5. **msm-javolution-...
- `spring-web-3.0.5.RELEASE.jar`:提供了Web应用的基础支持,如HttpSession监听器、Filter等。 6. **整合优势** - 降低了耦合度:Spring通过依赖注入将MyBatis的DAO层与业务层解耦。 - 提高开发效率:MyBatis...
为了监听`HttpSession`的创建、销毁以及属性变化,可以使用`HttpSessionListener`和`HttpSessionAttributeListener`。注册这些监听器可以让我们在特定事件发生时执行相应的操作,如记录日志、清理资源等。 ```java ...
4. **spring-web-4.0.0.RELEASE.jar**:该模块是Spring框架的Web支持部分,提供了与Servlet环境集成的基础设施,如HttpSession监听器和过滤器,以及ModelAndView类,用于Web MVC框架中的模型和视图管理。 5. **...
4. **其他监听器**: 还有一些其他的监听器,如域对象监听器(用于监听ServletContext、HttpSession和ServletRequest的属性变化),以及定制化的监听器。 **Web监听器的实现** Web监听器主要通过实现Java Servlet ...
2. **HttpSession监听器**:`OnlineNumberHttpSessionListener`类同样使用`@WebListener`注解,实现了`HttpSessionListener`接口,用于监听`HttpSession`的创建和销毁事件。每当一个新的`HttpSession`创建(用户登录...
3. HttpSession相关监听接口 补充知识: HttpSession表示用户会话,即在客户端与服务器端的一次交互过程中,所有请求和响应都属于同一个会话。 a. HttpSessionListener: 用于监听HttpSession的创建和销毁事件,...
- **功能**:监听`HttpSession`的创建与销毁。 - **方法**: - `sessionCreated(HttpSessionEvent se)`:当创建新的`HttpSession`时被调用。 - `sessionDestroyed(HttpSessionEvent se)`:当`HttpSession`销毁时...
7.session超时处理和httpsession监听器 8.bootstarp-Admin框架 9.记录登录者信息,存储在mongodb中.(使用到百度地图api中的IP精确定位) 已包含工具类: 1.ID生成器 2.日期处理 3.短信验证码发送(使用的是云片网络) ...
监听器基于Java的事件驱动模型,通过实现特定的接口,可以在ServletContext、HttpSession和ServletRequest等对象的生命周期事件(如创建、销毁)或者属性变化时执行自定义逻辑。 1. **Servlet监听器的基本原理** -...
例如,`ServletContextListener`用于监听ServletContext的生命周期事件,而`HttpSessionListener`则用于监听HttpSession的事件。当这些事件发生时,监听器的对应方法会被调用,从而可以执行相应的业务逻辑。 在本...