`
chun521521
  • 浏览: 284249 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

HttpSession监听

 
阅读更多

 

 

在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);
   }
  }
 }
 
 
}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Servlet中监听器介绍.doc

    2. **HttpSession监听器**: - `HttpSessionListener`接口:用于监听HttpSession的创建和销毁事件。`sessionCreated`方法在新的HttpSession被创建时调用,`sessionDestroyed`方法在HttpSession失效或被显式地销毁时...

    servlet过滤器1

    例如,当一个新的会话创建时,会触发HttpSession监听器的`sessionCreated()`方法。监听器分为三类: 1. **ServletRequest监听器**:监控HTTP请求,可以获取请求的详细信息。 2. **HttpSession监听器**:关注会话的...

    Servilet概述

    监听器通常分三类:基于 Servlet 上下文的 ServletContex 监听、基于会话的 HttpSession 监听和基于请求的 ServletRequest 监听。 ServletContext 监听器是基于 Servlet 上下文的监听器,存在范围是整个 Servlet ...

    tomcat配置文件web.xml与server.xml解析

    事件监听器可以分为三类:ServletContext 监听器、HttpSession 监听器和 ServletRequest 监听器。它们可以监听 Servlet 事件,如 Servlet 初始化、销毁、请求和响应等。 在 Web 应用程序中,事件监听器和过滤器可以...

    Servlet与JSP核心编程(第二版)源代码(正版)

    5. **监听器(Listener)**:源码可能包含对ServletContext、ServletRequest和HttpSession监听器的实现,这些监听器可以在特定事件发生时自动执行代码。 6. **JSP基础**:JSP页面的源码会演示如何在HTML中嵌入Java...

    SUN SCWCD认证考试真实题目一(有答案)

    你需要知道如何配置和实现它们,例如字符编码过滤器、登录验证过滤器、HttpSession监听器等。 6. **会话管理**:理解和掌握如何在Web应用中创建、跟踪和销毁session,以及session超时和安全性相关的策略。 7. **...

    电子商务系统 jsp购物系统

    7. **性能优化**:为了提高系统的响应速度,JSP支持缓存技术,例如使用Servlet的HttpSession监听器来缓存频繁访问的数据。同时,还可以结合使用Java的EJB(Enterprise JavaBeans)或Spring框架进行服务层的优化。 8...

    郭克华-J2EE视频源代码

    源码可能包含了这两个组件的使用,例如登录验证Filter或HttpSession监听器。 10. **MVC架构**:模型-视图-控制器模式在J2EE开发中常见,源码可能使用Struts、Spring MVC或自定义的框架实现这一模式。 11. **Spring...

    java线程聊天室(阻塞队列实现)

    在实际实现中,可以使用Spring框架的HttpSession监听器或者自定义Filter来管理session。当用户发送消息时,需要将session ID一同发送,以便服务器识别用户并将其放入正确的消息接收队列。此外,为了保证聊天室的安全...

    tomcat+memcached依赖包

    4. **memcached-session-manager-1.6.5.jar**:这是核心的session管理器,它实现了Servlet规范中的HttpSession监听器接口,负责将session数据序列化后存储到memcached,并在需要时反序列化。 5. **msm-javolution-...

    spring + mybaist 整合jar包

    - `spring-web-3.0.5.RELEASE.jar`:提供了Web应用的基础支持,如HttpSession监听器、Filter等。 6. **整合优势** - 降低了耦合度:Spring通过依赖注入将MyBatis的DAO层与业务层解耦。 - 提高开发效率:MyBatis...

    HttpSession的使用

    为了监听`HttpSession`的创建、销毁以及属性变化,可以使用`HttpSessionListener`和`HttpSessionAttributeListener`。注册这些监听器可以让我们在特定事件发生时执行相应的操作,如记录日志、清理资源等。 ```java ...

    spring4.0库

    4. **spring-web-4.0.0.RELEASE.jar**:该模块是Spring框架的Web支持部分,提供了与Servlet环境集成的基础设施,如HttpSession监听器和过滤器,以及ModelAndView类,用于Web MVC框架中的模型和视图管理。 5. **...

    web监听器代码--监听servlet

    4. **其他监听器**: 还有一些其他的监听器,如域对象监听器(用于监听ServletContext、HttpSession和ServletRequest的属性变化),以及定制化的监听器。 **Web监听器的实现** Web监听器主要通过实现Java Servlet ...

    servlet监听器

    3. HttpSession相关监听接口 补充知识: HttpSession表示用户会话,即在客户端与服务器端的一次交互过程中,所有请求和响应都属于同一个会话。 a. HttpSessionListener: 用于监听HttpSession的创建和销毁事件,...

    Java的监听器种类

    - **功能**:监听`HttpSession`的创建与销毁。 - **方法**: - `sessionCreated(HttpSessionEvent se)`:当创建新的`HttpSession`时被调用。 - `sessionDestroyed(HttpSessionEvent se)`:当`HttpSession`销毁时...

    IDEA 当前在线人数和历史访问量的示例代码

    2. **HttpSession监听器**:`OnlineNumberHttpSessionListener`类同样使用`@WebListener`注解,实现了`HttpSessionListener`接口,用于监听`HttpSession`的创建和销毁事件。每当一个新的`HttpSession`创建(用户登录...

    springboot-ng:springboot+angular -- 17年5月停更

    7.session超时处理和httpsession监听器 8.bootstarp-Admin框架 9.记录登录者信息,存储在mongodb中.(使用到百度地图api中的IP精确定位) 已包含工具类: 1.ID生成器 2.日期处理 3.短信验证码发送(使用的是云片网络) ...

    SSH集成Servlet监听

    监听器基于Java的事件驱动模型,通过实现特定的接口,可以在ServletContext、HttpSession和ServletRequest等对象的生命周期事件(如创建、销毁)或者属性变化时执行自定义逻辑。 1. **Servlet监听器的基本原理** -...

    jsp中监听器实现在线用户统计

    例如,`ServletContextListener`用于监听ServletContext的生命周期事件,而`HttpSessionListener`则用于监听HttpSession的事件。当这些事件发生时,监听器的对应方法会被调用,从而可以执行相应的业务逻辑。 在本...

Global site tag (gtag.js) - Google Analytics