日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot使用HttpSessionListener监听器统计在线用户数

發布時間:2024/9/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot使用HttpSessionListener监听器统计在线用户数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

    • 實體類
    • 自定義事件
    • 自定義監聽器
    • 使用HttpSessionListener作監聽器
    • Servlet監聽器
    • controller層

實體類

public class User {private Long id;private String username;private String password;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User(Long id, String username, String password) {this.id = id;this.username = username;this.password = password;}public User() {} }

自定義事件

public class MyEvent extends ApplicationEvent {private User user;public MyEvent(Object source, User user) {super(source);this.user = user;}public User getUser() {return user;}public void setUser(User user) {this.user = user;} }

service:

```java @Service public class UserService {@Resourceprivate ApplicationContext applicationContext;/*** 發布事件* @return*/public User getUser2() {User user = new User(1L, "小明", "123456");// 發布事件MyEvent event = new MyEvent(this, user);applicationContext.publishEvent(event);return user;}/*** 獲取用戶信息* @return*/public User getUser() {// 實際中會根據具體的業務場景,從數據庫中查詢對應的信息return new User(1L, "小明", "123456");} }

自定義監聽器

@Component public class MyEventListener implements ApplicationListener<MyEvent> {@Overridepublic void onApplicationEvent(MyEvent myEvent) {// 把事件中的信息獲取到User user = myEvent.getUser();// 處理事件,實際項目中可以通知別的模塊或者處理其他邏輯等等System.out.println("用戶名:" + user.getUsername());System.out.println("密碼:" + user.getPassword());} }

使用HttpSessionListener作監聽器

@Component public class MyHttpSessionListener implements HttpSessionListener {private static final Logger logger = LoggerFactory.getLogger(MyHttpSessionListener.class);/*** 記錄在線的用戶數量*/public Integer count = 0;@Overridepublic synchronized void sessionCreated(HttpSessionEvent httpSessionEvent) {logger.info("新用戶上線了");count++;httpSessionEvent.getSession().getServletContext().setAttribute("count", count);}@Overridepublic synchronized void sessionDestroyed(HttpSessionEvent httpSessionEvent) {logger.info("用戶下線了");count--;httpSessionEvent.getSession().getServletContext().setAttribute("count", count);} }

Servlet監聽器

@Component public class MyServletContextListener implements ApplicationListener<ContextRefreshedEvent> {@Overridepublic void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {// 先獲取到application上下文ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();// 獲取對應的serviceUserService userService = applicationContext.getBean(UserService.class);User user = userService.getUser();// 獲取application域對象,將查到的信息放到application域中ServletContext application = applicationContext.getBean(ServletContext.class);application.setAttribute("user", user);} } @Component public class MyServletRequestListener implements ServletRequestListener {private static final Logger logger = LoggerFactory.getLogger(MyServletRequestListener.class);@Overridepublic void requestInitialized(ServletRequestEvent servletRequestEvent) {HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();logger.info("session id為:{}", request.getRequestedSessionId());logger.info("request url為:{}", request.getRequestURL());request.setAttribute("name", "小明");}@Overridepublic void requestDestroyed(ServletRequestEvent servletRequestEvent) {logger.info("request end");HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();logger.info("request域中保存的name值為:{}", request.getAttribute("name"));}}

controller層

@RestController @RequestMapping("/listener") public class TestController {@Resourceprivate UserService userService;@GetMapping("/user")public User getUser(HttpServletRequest request) {ServletContext application = request.getServletContext();return (User) application.getAttribute("user");}/*** 獲取當前在線人數* @param request* @return*/@GetMapping("/total2")public String getTotalUser(HttpServletRequest request, HttpServletResponse response) {Cookie cookie;try {// 把sessionId記錄在瀏覽器中cookie = new Cookie("JSESSIONID", URLEncoder.encode(request.getSession().getId(), "utf-8"));cookie.setPath("/");//設置cookie有效期為2天,設置長一點cookie.setMaxAge( 48*60 * 60);response.addCookie(cookie);} catch (UnsupportedEncodingException e) {e.printStackTrace();}Integer count = (Integer) request.getSession().getServletContext().getAttribute("count");return "當前在線人數:" + count;}@GetMapping("/request")public String getRequestInfo(HttpServletRequest request) {System.out.println("requestListener中的初始化的name數據:" + request.getAttribute("name"));return "success";}@GetMapping("/publish")public User publishEvent() {return userService.getUser2();}}

運行結果:

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的springboot使用HttpSessionListener监听器统计在线用户数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。