520也依旧勤奋的写着代码,我真是太勤勉了

实现了用户登录的监听器,实时监听session,以此控制数据库中用户的登录状态

本来在监听器上同时加入了@Component@WebListener,随后监听器便运行了两次,便去掉了@WebListener注解

以下是完整的监听器代码:

package com.video.listener;import com.video.service.UserLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;@Component
//@WebListener
public class UserLoginListener implements HttpSessionListener, ServletContextListener {private ServletContext application = null;@Autowiredprivate UserLoginService userLoginService;public void contextDestroyed(ServletContextEvent s) {System.out.println("context Destroyed");}public void contextInitialized(ServletContextEvent sce) {System.out.println("context init");application = sce.getServletContext();Set<String> onlineUserSet = new HashSet<>();application.setAttribute("onlineUserSet", onlineUserSet);}public void sessionCreated(HttpSessionEvent se) {System.out.println("session create");}public void sessionDestroyed(HttpSessionEvent se) {HttpSession session = se.getSession();Set<String> onlineUserSet = (Set<String>)application.getAttribute("onlineUserSet");String userId = (String)session.getAttribute("userId");onlineUserSet.remove(userId);application.setAttribute("onlineUserSet",onlineUserSet);//设置离线状态int rows = userLoginService.setOffline(userId);if(rows>0){System.out.println("离线成功");}Date date = new Date();SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(formatter.format(date));onlineUserSet = (Set<String>)application.getAttribute("onlineUserSet");System.out.println("当前在线用户:"+onlineUserSet.toString());System.out.println(userId + "-->超时退出");}}

这是登录功能代码:

@RequestMapping("/login")@ResponseBodypublic MsgResponse login(String number, String password,Integer check, HttpServletRequest request){User user = userLoginService.checkLogin(number,password,check);//验证失败返回if (user==null){return MsgResponse.error("账号或密码错误");}HttpSession session = request.getSession();ServletContext application = session.getServletContext();//验证成功//将用户信息添加到session当中session.setAttribute("user",user);String userId = user.getUserId();//设置状态为离线int rows = userLoginService.setOnline(userId);//获取当前时间Date date = new Date();SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//将用户名信息加到application当中session.setAttribute("userId", userId);Set<String> onlineUserSet = (Set)application.getAttribute("onlineUserSet");onlineUserSet.add(userId);application.setAttribute("onlineUserSet", onlineUserSet);//输出用户登录情况到控制台System.out.println(formatter.format(date));System.out.println("用户:"+userId+"已登录");System.out.println("当前在线用户:"+onlineUserSet.toString());return MsgResponse.success("登录成功",null);}

同时还需要在启动器上加上@ServletComponentScan注解

配置文件properties中可以设置session的超时时间,为了测试效果,这里用了十秒钟

server.servlet.session.timeout=10s

这样便完成了监听器对session的在线离线状况的监控!

 我真是太勤勉了,晚安!

springboot使用监听器实现用户在线离线状态的监控相关推荐

  1. Teams数据统计 - 用户在线离线状态

    前几天我在wechat的moments里看到以为朋友发了腾迅会议的对用户个人的年度数据统计,看上去很有大数据感.    实际上 Teams 也具备的类似的能力,只是它把这个能力开放给了开发人员,我们可 ...

  2. 阿里云物联网批量获取设备的在线离线状态

    一.背景 我们在做物联网的时候,除了控制设备进行一些操作之外.设备的在线离线显示也是很重要的.如果设备离线的话,此时用户操作设备,设备并不会做出反应.对用户而言,操作体验当然是非常不好的. 这边我们可 ...

  3. html检测用户在线离线,HTML5 --- navigator.onLine 离线检测(示例代码)

    navigator.onLine,是一个属性,返回浏览器的联网状态.主要用于查看你是否连接上了互联网. 在正常联网的情况下会返回true,没有联网即离线的状态下返回false. 一旦浏览器的联网状态发 ...

  4. 有事您Q我,qq在线离线状态

    是腾讯的互动代码.是一种服务,免费的. 你可以到http://is.qq.com/webpresence/code.shtml腾讯互动状态代码按照提示生成你需要的代码.然后添加到网页代码或支持的博客中 ...

  5. 为什么在旺遍天下生成代码我在线却是离线状态 旺旺在线代码生成

    原文地址:http://bangpai.taobao.com/group/thread/142446-289892356.htm 大家好,这是我第一张帖子,YY开店有很一段时间了,直到最近才动手开始. ...

  6. Springboot自定义注解实现用户登录状态校验(一)

    Springboot自定义注解实现用户登录状态校验(一) 拦截器方式 定义注解类 import java.lang.annotation.*;/*** @author:小飞猪* @date:2020/ ...

  7. steam好友服务器当前处于离线状态,steam怎么修改在线状态-steam设置离线、想交易、隐身等状态的方法 - 河东软件园...

    Steam是很多用户在玩游戏的时候都会选择的游戏平台,在这个平台中玩游戏的时候可以认识很多志同道合的好友,大家可以一起玩游戏.不知道大家有没有发现在好友列表中是可以看见对方的状态的,因此对方也可以看见 ...

  8. SpringBoot整合微信支付开发在线教育视频网站(完整版)

    目录 ├─code.zip ├─第 1 章项目介绍和前期准备 │  ├─1-1 SpringBoot整合微信支付开发在线教育视频站点介绍.TS │  ├─1-2 中大型公司里面项目开发流程讲解.TS ...

  9. java基于springboot的高校学报论文在线投稿系统

    项目介绍 在新发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求.在这种时代背景下,高校只能以工作人员为导向,以稿件的持续创新作为高校最重要的竞争手段. 功能 ...

最新文章

  1. python b64encode_Python base64模块详解 | 学步园
  2. 如何用python生成软件_python中的生成器函数是如何工作的?
  3. 如何将类序列化并直接存储入数据库
  4. 2 自动递增_有石CAD自动下单,1天工作量1小时完成
  5. 吴裕雄 19-Mysql 连接的使用
  6. 为什么刹车热了会失灵_网曝比亚迪汉“刹车失灵”,比亚迪称:是IPB模块仪表显示问题...
  7. 什么是微服务?为什么你要用微服务?
  8. while(0)循环还执行吗_for循环
  9. 落户北京经开区 小米汽车首车预计2024年下线并量产 网友:开始存钱!
  10. Spring Boot异常处理
  11. 转载Docker in production: An history of failure
  12. matlab2c使用c++实现matlab函数系列教程-real函数
  13. 提交文件到svn,提示is not under version control
  14. 计算机专用英语1500词带音标,带音标的计算机英语1500词
  15. lingo纳什均衡代码_传统的战略式博弈求解纳什均衡方法——虚拟博弈(Fictitious Play)讲解及其代码...
  16. jlink修复固件教程
  17. 分享 | 自定义属于自己的U盘图标
  18. MATLAB 林地郁闭度计算
  19. 【DeepLab v1 2016】SEMANTIC IMAGE SEGMENTATION WITH DEEP CON- VOLUTIONAL NETS AND FULLY CONNECTED CRFS
  20. 2004年中国企业自主创新宣言

热门文章

  1. Android实战--远程操控安卓手机
  2. 归纳常见几种下载文件方式
  3. python 蒙太奇马赛克图像生成
  4. linux执行lsof命令_Linux 命令神器:lsof
  5. 用户名123,密码456,点击提交,显示登录成功
  6. VSFTP服务报错,pam_unix(vsftpd:auth): authenticatio,pam_unix(vsftpd:auth): check pass; user unknown pam_
  7. 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大
  8. Zookeeper 笔记
  9. python2升级为python3
  10. java undertow_Undertow