在web.xml中将原先的那个监听器替换为自己写的这个就可以了,检测在线用户的只有一个表,里面只有一个id字段。如果用户不是很多,这个表可以是一个MySQL的内存表,或者Oralce的表存储修改为内存。
package com.yourcompany.service.security;
import javax.servlet.http.HttpSessionEvent;
import org.springframework.security.Authentication;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.security.ui.session.HttpSessionEventPublisher;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.yourcompany.domain.entity.security.User;
import com.yourcompany.service.mgmt.OnlineUserService;
/**
* 扩展的HttpSessionEventPublisher
* 支持在线人数统计
*
*/
public class EnhancedHttpSessionEventPublisher extends HttpSessionEventPublisher {
@Override
public void sessionCreated(HttpSessionEvent event) {
// 将用户加入到在线用户列表中
saveOrDeleteOnlineUser(event, Type.SAVE);
super.sessionCreated(event);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
// 将用户从在线用户列表中移除
saveOrDeleteOnlineUser(event, Type.DELETE);
super.sessionDestroyed(event);
}
public void saveOrDeleteOnlineUser(HttpSessionEvent event, Type type) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
Object principal = auth.getPrincipal();
if (principal instanceof User) {
User user = (User) principal;
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(event
.getSession().getServletContext());
OnlineUserService onlineUserService = (OnlineUserService) wac.getBean("onlineUserService");
switch (type) {
case SAVE:
onlineUserService.saveOnlineUser(user.getId());
break;
case DELETE:
onlineUserService.deleteOnlineUser(user.getId());
break;
}
}
}
}
/**
* 定义一个简单的内部枚举
*/
private static enum Type {
SAVE, DELETE;
}
}
分享到:
相关推荐
Spring Security 在线用户统计实现详解 在本文中,我们将详细介绍如何基于 Spring Security 实现在线用户统计。在线用户统计是指在系统中实时统计当前活跃用户的数量,以便更好地监控和管理系统的使用情况。 ...
这篇博客“spring security 3.1获取所有已登录用户的终极方案”可能探讨了如何在Spring Security 3.1环境中获取所有已登录的用户信息。通常,这样的需求在多用户协作、用户管理或统计分析等场景中比较常见。 首先,...
在这个新冠疫情管理系统中,SpringSecurity可能被用来实现用户身份验证,确保只有经过授权的用户才能访问特定的系统功能,例如查看敏感的疫情数据或者发布信息。它还可以用于防止恶意攻击,如CSRF(跨站请求伪造)和...
本项目基于Spring Boot、Spring Security和Vue.js三大技术栈,构建了一个高效、安全且用户友好的物业管理平台。下面将详细探讨这三个关键技术在系统中的应用和重要性。 **1. Spring Boot** Spring Boot是Spring框架...
基于SpringBoot框架开发的博客系统,采用了springBoot、springSecurity、Redis、elasticSearch、rabbitmq、Mybatis、Nginx等技术,主要实现了博文管理、统计图表、访问记录、附件管理、用户管理、友链管理、监控管理...
- **安全性**:Spring Security确保数据的安全性,例如,只有授权用户才能访问敏感信息。 5. **开发流程**: - **环境搭建**:安装Java、Maven、IDE等开发工具,导入项目到IDE,配置Spring Boot运行环境。 - **...
技术栈为Springboot+Vue、Mysql、Mybatis、Druid、SpringSecurity、JWT、Redis的项目。它包括了管理员和普通用户两类人员的功能。 对于管理员,他们可以进行图书管理,包括添加、删除、修改、查看图书,并且可以对...
Spring Security是Spring生态系统中的安全模块,专门用于处理应用安全问题,如用户认证和授权。在这个系统中,Spring Security负责实现用户的登录验证、权限管理等功能。它可以根据需求定制访问控制策略,确保只有...
在实际应用中,拦截器可以结合Spring Security进行权限控制,例如检查用户是否已登录,或者在处理完请求后记录操作日志。还可以利用`ModelAndView`对象在`postHandle`方法中修改视图数据,以实现动态页面布局或添加...
毕业设计,基于SpringBoot+SpringSecurity开发的新冠疫情管理系统,内含Java完整源代码,数据库脚本 基于SpringBoot+SpringSecurity+Thymeleaf新冠疫情管理系统设计毕业源码案例设计 基于SpringBoot及thymeleaf...
总的来说,SSH在系统管理和数据库运维中扮演着重要角色,它提供了安全的远程访问,并且有多种方式可以用来统计和显示当前在线用户信息。通过熟练掌握这些技巧,可以有效地监控和管理你的服务器资源。
在"Spring boot点赞统计量"这个项目中,我们关注的是如何使用Spring Boot来实现博客文章的点赞功能。这个功能通常涉及到以下几个关键知识点: 1. **Spring Boot MVC**:Spring Boot 的 Web 依赖提供了 Spring MVC ...
4. **Spring Security**:用于身份验证和授权,Spring Security能够帮助开发者实现用户登录、权限控制等功能。在这个项目中,Spring Security可以实现对API接口的权限验证,确保只有合法用户才能访问特定资源。 ...
本系统的技术环境为: JDK1.8 SpringMvc SpringSecurity SpringBoot Mysql Mybatis Thymeleaf echarts 如果有同学需要毕业设计的话,可以借鉴 系统功能模块 疫情信息管理系统应当具备两种对象,疫情管理员对象可以...
- 后端采用Spring Boot、Spring Security、Redis & Jwt。 - 权限认证使用Jwt,支持多终端认证系统。 - 支持加载动态权限菜单,多方式轻松权限控制。 - 高效率开发,使用代码生成器可以一键生成前后端代码。 ## 功能...
3. Spring Security:集成Spring Security,可以提供用户认证和授权功能,保障系统安全。 4. Ajax通信:ExtJS通过Ajax与Spring后台进行通信,实现异步请求,提升用户体验。 四、人力资源管理系统实践 1. 用户管理:...
**二、Spring Boot 2.0与Spring Security的整合** 在Spring Boot 2.0版本中,Spring Security默认的验证模式已不再是HttpBasic,而是表单验证。因此,若要使用HttpBasic模式,我们需要手动配置。可以通过在项目中...
技术实现上,可能使用了MySQL作为数据库存储用户信息和请假记录,使用Spring Security进行权限控制,Thymeleaf或Freemarker作为前端模板引擎展示页面,使用Ajax实现异步交互,提高用户体验。此外,可能还运用了JPA...