首页 > 其他分享 >Springboot 用session监听器统计在线用户数量

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

时间:2022-11-07 19:05:17浏览次数:46  
标签:Springboot onlineCount session 监听器 HttpSessionListener public se


今天给大家分享这个吧。

利用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 "用户登录";
}

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

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

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

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

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

然后你可以继续用浏览器访问,你会发现控制台不会继续输出,因为你的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过期了就会这样~

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

 

 

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

 

 

 

标签:Springboot,onlineCount,session,监听器,HttpSessionListener,public,se
From: https://blog.51cto.com/u_15753094/5830861

相关文章