概括:
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加載進來
開始測試吧