Springboot 用session监听器统计在线用户数量

简介: Springboot 用session监听器统计在线用户数量

今天给大家分享这个吧。


利用Springboot中的session监听器去实现统计在线用户数量的需求(当然其实用shiro或者security是框架自己带有会话管理的,用起来更加方便)。


但是, 接下来这个是非常简单直接快速的实现这个需求,不废话了


上代码:


第一步  . 既然用监听器实现,那肯定得创建监听器了。


创建SessionListener.class


我用的是最直接的注解方式,图方便。  


这边的关键是两点,①@WebListener  ②implements HttpSessionListener


其他的思路看代码就能看懂,而且也做了注释。


import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
 * @Author : JCccc
 * @CreateTime : 2018-11-15
 * @Description :
 * @Point: Keep a good mood
 **/
@WebListener
public class SessionListener implements HttpSessionListener{
    private int onlineCount = 0;//记录session的数量
    /**
     * session创建后执行
     */
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        onlineCount++;
        System.out.println("【HttpSessionListener监听器】 sessionCreated, onlineCount:" + onlineCount);
       //将最新的onlineCount值存起来
        se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);
    }
    /**
     * session失效后执行
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        if (onlineCount > 0) {
            onlineCount--;
        }
        System.out.println("【HttpSessionListener监听器】 sessionDestroyed, onlineCount:" + onlineCount);
        //将最新的onlineCount值存起来
        se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);
    }
}


第二步. 好了其实已经完成了。

 

接下来就是单纯的校验:


首先模拟一个系统的登录接口,


@GetMapping("/login")
 public String login(HttpSession session){
    //模拟一个用户调用了登录接口,进入系统
    return "用户登录";
}


然后在浏览器访问一下,假装登录:


image.png


这时候,你可以看到控制台输出了:


image.png


是的,已经统计到一个了。


然后你可以继续用浏览器访问,你会发现控制台不会继续输出,因为你的ip对应的这个session还没过期,这就避免了重复统计。


然后,你把你的这个/login丢给你身边的小伙伴测试下,你就会发现控制台又输出了,而且 onlineCount变成2了。


最后,再写个获取这个统计值 onlineCount吧:


@GetMapping("/getOnlineCount")
public String getOnlineCount(HttpServletRequest httpServletRequest){
    HttpSession  session = httpServletRequest.getSession();
    //将session监听器的统计在线人数给拿出来~
    Object onlineCount=session.getServletContext().getAttribute("onlineCount");
    //展示一下,看看
    return "onlineCount : "+onlineCount;
}


再贴一个图,session过期了就会这样~


image.png


好了,就到此吧,顺便一提,在监听器那边是可以每次统计之后,不止set进session里面,还可以存数据库。

相关文章
|
3月前
|
安全 Java Spring
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
48 0
|
2月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
38 1
|
4月前
|
Java 容器
SpringBoot3 事件和监听器
SpringBoot3 事件和监听器
|
2月前
|
存储 NoSQL 前端开发
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
|
8月前
|
前端开发 JavaScript Java
SpringBoot Ajax跨域问题(session共享问题)
ajax 发送post请求至springBoot出现跨域问题 需要在springBoot加上注解 @CrossOrigin 就能解决
40 0
|
4月前
|
NoSQL Java Redis
SpringBoot-自定义监听器
本文讲解如何在Spring Boot创建自定义监听器
39 0
SpringBoot-自定义监听器
|
7月前
|
前端开发 Java 数据安全/隐私保护
SpringBoot2.0(过滤器,监听器,拦截器)
SpringBoot2.0(过滤器,监听器,拦截器)
|
8月前
|
Java Spring
Spring Boot 中的 Session 是什么,如何使用
Spring Boot 中的 Session 是什么,如何使用
|
10月前
|
安全 Java Spring
SpringBoot整合Spring Security,使用Session方式的验证码(六)
这里用到了一个常量类,到时候做验证码判断时用的比较多:
91 0
|
10月前
|
前端开发 Java
springboot中的过滤器和监听器
springboot中的过滤器和监听器