zoukankan      html  css  js  c++  java
  • Spring Boot 监听器 通过Session监听在线人数

    首先,需要一个Listener实现Session监听器的接口HttpSessionListener

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    @Component
    public class OnlineCountListener implements HttpSessionListener {
    
        public static int count=0;
    
        protected final static Logger logger = LoggerFactory.getLogger(OnlineCountListener.class);
    
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            count--;
            logger.info("session销毁,count--, count="+count);
            se.getSession().setAttribute("count",count);
    //    以下三行为另外一种获取request和session的方法   // HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); // HttpSession session = request.getSession(); // session.setAttribute("count", count); } @Override public void sessionCreated(HttpSessionEvent se) { count++; logger.info("session创建,count++, count="+count); se.getSession().setAttribute("count", count); } }

    HttpSessionListener一共有两个方法,顾名思义,一个用来监听系统创建session,一个用来监听系统销毁session。

    这里使用静态变量count来记录当前在线人数。

    通过@Component注解将类放入Spring中管理。

    其次,需要通过@Configuration将监听类加载到项目启动中。

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class PeWebConfigurer implements WebMvcConfigurer {
    
        @Autowired 
       private OnlineCountListener onlineCountListener; @Bean
    public ServletListenerRegistrationBean listenerRegist() { ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean(); srb.setListener(onlineCountListener); System.out.println("listener"); return srb; } }

    如此,在项目启动过程中,就可以看到监听器被注册的信息了

    最后,说一下调用获取在线人数。

    刚刚已经介绍了,这里的count是静态变量,所以可以直接通过 OnlineCountListener.count获取结果

  • 相关阅读:
    近段时间学习html和CSS的一些细碎总结
    循环队列
    【IOS】IOS高速入门之OC语法
    2014华为机试-字符串替换
    自己动手写操作系统--个人实践
    HBase学习(十四)LINUX下用Eclipse构建HBase开发环境
    IOS成长之路-Nsstring中搜索方法rangeOfString
    Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败
    java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox
    十二.200多万元得到的创业教训--app名字是关键
  • 原文地址:https://www.cnblogs.com/wulisz/p/14871550.html
Copyright © 2011-2022 走看看