springboot使用HttpSessionListener 监听器统计当前在线人数
时间:2019-08-23
本文章向大家介绍springboot使用HttpSessionListener 监听器统计当前在线人数,主要包括springboot使用HttpSessionListener 监听器统计当前在线人数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
概括:
request.getSession(true):若存在会话则返回该会话,否则新建一个会话。
request.getSession(false):若存在会话则返回该会话,否则返回NULL
https://blog.csdn.net/qq_38091831/article/details/82912831
原理就是很简单,就是利用HttpSessionListener 监听session的创建和销毁,然后定义个静态变量存储在线人数的变化。 说两种方式,第一种是使用配置类,第二种是使用@WebListener注解,都差不多 方式一:使用配置类 1.创建session监听器 package com.sdsft.pcweb.common.listener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class MyHttpSessionListener implements HttpSessionListener { public static int online = 0; @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("创建session"); online ++; } @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("销毁session"); online --; } } 2.配置类 package com.sdsft.pcweb.common.config; import com.sdsft.pcweb.common.listener.MyHttpSessionListener; 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.WebMvcConfigurer; @Configuration public class MywebConfig implements WebMvcConfigurer { @Bean public ServletListenerRegistrationBean listenerRegist() { ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean(); srb.setListener(new MyHttpSessionListener()); System.out.println("listener"); return srb; } } 3.控制器 package com.sdsft.pcweb.controller; import com.sdsft.pcweb.common.entity.CommonResult; import com.sdsft.pcweb.common.enums.ResultEnum; import com.sdsft.pcweb.common.listener.MyHttpSessionListener; import com.sdsft.pcweb.service.LoginService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * LoginController class * @author zcz * @date 2018/09/20 */ @RequestMapping("/userInfo") @RestController public class LoginController { private static Logger logger = LoggerFactory.getLogger(LoginController.class); /** * 登录 */ @PostMapping("/Login") public void getUserByUserNameAndPassword(String username, String password, HttpSession session) { logger.info("用户【"+username+"】登陆开始!"); if("admin".equals(username) && "123456".equals(password)){ session.setAttribute("loginName",username); logger.info("用户【"+username+"】登陆成功!"); }else{ logger.info("用户【"+username+"】登录失败!"); } } /** *查询在线人数 */ @RequestMapping("/online") public Object online() { return "当前在线人数:" + MyHttpSessionListener.online + "人"; } /** * 退出登录 */ @RequestMapping("/Logout") public CommonResult Logout( HttpServletRequest request) { logger.info("用户退出登录开始!"); HttpSession session = request.getSession(false);//防止创建Session if(session != null){ session.removeAttribute("loginName"); session.invalidate(); } logger.info("用户退出登录结束!"); return new CommonResult(ResultEnum.SUCCESS.getCode(), "退出成功!"); } /** * 判断session是否有效 * @param httpServletRequest * @return */ @RequestMapping("/getSession") public String getSession(HttpServletRequest httpServletRequest) { HttpSession session = httpServletRequest.getSession(); String loginName = (String) session.getAttribute("loginName"); if (StringUtils.isNotBlank(loginName)) { return "200"; } return ""; } } 测试一下吧 方式二:使用@WebListener注解 1.创建监听器,加注解@WebListener package com.sdsft.pcweb.common.listener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @WebListener public class MyHttpSessionListener implements HttpSessionListener { public static int online = 0; @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("创建session"); online ++; } @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("销毁session"); online --; } } 2.控制器 package com.sdsft.pcweb.controller; import com.sdsft.pcweb.common.entity.CommonResult; import com.sdsft.pcweb.common.enums.ResultEnum; import com.sdsft.pcweb.common.listener.MyHttpSessionListener; import com.sdsft.pcweb.service.LoginService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * LoginController class * @author zcz * @date 2018/09/20 */ @RequestMapping("/userInfo") @RestController public class LoginController { private static Logger logger = LoggerFactory.getLogger(LoginController.class); /** * 登录 */ @PostMapping("/Login") public void getUserByUserNameAndPassword(String username, String password, HttpSession session) { logger.info("用户【"+username+"】登陆开始!"); if("admin".equals(username) && "123456".equals(password)){ session.setAttribute("loginName",username); logger.info("用户【"+username+"】登陆成功!"); }else{ logger.info("用户【"+username+"】登录失败!"); } } /** *查询在线人数 */ @RequestMapping("/online") public Object online() { return "当前在线人数:" + MyHttpSessionListener.online + "人"; } /** * 退出登录 */ @RequestMapping("/Logout") public CommonResult Logout( HttpServletRequest request) { logger.info("用户退出登录开始!"); HttpSession session = request.getSession(false);//防止创建Session if(session != null){ session.removeAttribute("loginName"); session.invalidate(); } logger.info("用户退出登录结束!"); return new CommonResult(ResultEnum.SUCCESS.getCode(), "退出成功!"); } /** * 判断session是否有效 * @param httpServletRequest * @return */ @RequestMapping("/getSession") public String getSession(HttpServletRequest httpServletRequest) { HttpSession session = httpServletRequest.getSession(); String loginName = (String) session.getAttribute("loginName"); if (StringUtils.isNotBlank(loginName)) { return "200"; } return ""; } } 3.启动类加@ServletComponentScan注解,这样才能在程序启动时将对应的bean加载进来 package com.sdsft.pcweb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan public class PcwebApplication { public static void main(String[] args) { SpringApplication.run(PcwebApplication.class, args); } } 开始测试吧
springboot统计当前在线人数,springboot使用HttpSessionListener 监听器统计当前在线人数,拿来即用,不忽悠
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原理就是很简单,就是利用HttpSessionListener 监听session的创建和销毁,然后定义个静态变量存储在线人数的变化。
说两种方式,第一种是使用配置类,第二种是使用@WebListener注解,都差不多
方式一:使用配置类
1.创建session监听器
2.配置类
3.控制器
测试一下吧
方式二:使用@WebListener注解
1.创建监听器,加注解@WebListener
2.控制器
3.启动类加@ServletComponentScan注解,这样才能在程序启动时将对应的bean加载进来
开始测试吧
原文地址:https://www.cnblogs.com/kelelipeng/p/11399977.html
- 在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
- 平方根的C语言实现(一) —— 浮点数的存储
- 用awk写递归
- bc计算A股上市新股依次涨停股价
- ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式
- python访问http的GET/POST
- 用openssl库RSA加密解密
- Kobject浅析
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
- RSA简介(二)——模幂算法
- 为虚拟机vCPU绑定物理CPU
- RSA简介(三)——寻找质数
- RSA简介(四)——求逆算法
- 平方根的C语言实现(三) ——最终程序实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 哈希表:可以拿数组当哈希表来用,但哈希值不要太大!
- 【Python】Scrapy爬虫入门(一)Scrapy的基本用法和爬取静态网站
- 【动手学深度学习笔记】之读取和存储
- 据说这才是看热搜的正确方法?
- Ubuntu18.04安装Anaconda3和VSCode指南
- 微信小程序里如何使用npm?小程序集成友盟举例
- 听说你的表情包不够用了?
- 【Python】Python爬虫爬取中国天气网(二)
- C#和sql连接实例
- 【Python】五分钟画一条动态心形曲线~
- 三步修改jupyter notebook主题和页面宽度
- “为了看星星,我自己做了一个行星观测器”
- Java生成报表数据图片
- 【动手学深度学习笔记】之二维卷积层
- Gitee+VuePress搭建个人博客