网站建设咨询有客诚信wordpress手机全部显示

news/2025/9/26 0:26:12/文章来源:
网站建设咨询有客诚信,wordpress手机全部显示,凡科网络,霞浦县建设局网站在Shiro中我们可以通过org.apache.shiro.session.mgt.eis.SessionDAO对象的getActiveSessions()方法方便的获取到当前所有有效的Session对象。通过这些Session对象#xff0c;我们可以实现一些比较有趣的功能#xff0c;比如查看当前系统的在线人数#xff0c;查看这些在线用…在Shiro中我们可以通过org.apache.shiro.session.mgt.eis.SessionDAO对象的getActiveSessions()方法方便的获取到当前所有有效的Session对象。通过这些Session对象我们可以实现一些比较有趣的功能比如查看当前系统的在线人数查看这些在线用户的一些基本信息强制让某个用户下线等。我们在现有的Spring Boot Shiro项目基础上进行一些改造。Redis Session管理Redis作为缓存实现那么SessionDAO为RedisSessionDAO/*** session会话** return*/Beanpublic RedisSessionDAO sessionDAO() {RedisSessionDAO redisSessionDAO new RedisSessionDAO();redisSessionDAO.setRedisManager(redisManager());return redisSessionDAO;}Ehcache Session管理Ehcache作为缓存实现那么SessionDAO为RedisSessionDAO/*** session会话** return*/Beanpublic SessionDAO sessionDAO() {MemorySessionDAO sessionDAO new MemorySessionDAO();return sessionDAO;}SessionManager 管理器SessionDao通过org.apache.shiro.session.mgt.SessionManager进行管理在ShiroConfig中配置SessionManager/*** session会话管理器*/Beanpublic SessionManager sessionManager() {DefaultWebSessionManager sessionManager new DefaultWebSessionManager();Collection listeners new ArrayList();listeners.add(new ShiroSessionListener());sessionManager.setSessionListeners(listeners);sessionManager.setSessionDAO(sessionDAO());return sessionManager;}ShiroSessionListener 监听器public class ShiroSessionListener implements SessionListener{private final AtomicInteger sessionCount new AtomicInteger(0);Overridepublic void onStart(Session session) {sessionCount.incrementAndGet();}Overridepublic void onStop(Session session) {sessionCount.decrementAndGet();}Overridepublic void onExpiration(Session session) {sessionCount.decrementAndGet();}}ShiroSessionListener维护着一个原子类型的Integer对象用于统计在线Session的数量。定义完SessionManager后还需将其注入到SecurityManager中Beanpublic SecurityManager securityManager(){DefaultWebSecurityManager securityManager new DefaultWebSecurityManager();securityManager.setRealm(shiroRealm());...securityManager.setSessionManager(sessionManager());return securityManager;}UserOnline配置完ShiroConfig后我们可以创建一个UserOnline实体类用于描述每个在线用户的基本信息public class UserOnline implements Serializable{private static final long serialVersionUID 3828664348416633856L;// session idprivate String id;// 用户idprivate String userId;// 用户名称private String username;// 用户主机地址private String host;// 用户登录时系统IPprivate String systemHost;// 状态private String status;// session创建时间private Date startTimestamp;// session最后访问时间private Date lastAccessTime;// 超时时间private Long timeout;// get set略}Service创建一个Service接口包含查看所有在线用户和根据SessionId踢出用户抽象方法public interface SessionService {List list();boolean forceLogout(String sessionId);}其具体实现Servicepublic class SessionServiceImpl implements SessionService {Autowiredprivate SessionDAO sessionDAO;Overridepublic List list() {List list new ArrayList();Collection sessions sessionDAO.getActiveSessions();for (Session session : sessions) {UserOnline userOnline new UserOnline();TbUser user;SimplePrincipalCollection principalCollection;if (session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY) null) {continue;} else {principalCollection (SimplePrincipalCollection) session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);user (TbUser) principalCollection.getPrimaryPrincipal();userOnline.setUsername(user.getUserName());userOnline.setUserId(user.getId().toString());}userOnline.setId((String) session.getId());userOnline.setHost(session.getHost());userOnline.setStartTimestamp(session.getStartTimestamp());userOnline.setLastAccessTime(session.getLastAccessTime());Long timeout session.getTimeout();if (timeout 0L) {userOnline.setStatus(离线);} else {userOnline.setStatus(在线);}userOnline.setTimeout(timeout);list.add(userOnline);}return list;}Overridepublic boolean forceLogout(String sessionId) {Session session sessionDAO.readSession(sessionId);session.setTimeout(0);return true;}}通过SessionDao的getActiveSessions()方法我们可以获取所有有效的Session通过该Session我们还可以获取到当前用户的Principal信息。值得说明的是当某个用户被踢出后(Session Time置为0)该Session并不会立刻从ActiveSessions中剔除所以我们可以通过其timeout信息来判断该用户在线与否。如果使用的Redis作为缓存实现那么forceLogout()方法需要稍作修改Overridepublic boolean forceLogout(String sessionId) {Session session sessionDAO.readSession(sessionId);sessionDAO.delete(session);return true;}Controller定义一个SessionContoller用于处理Session的相关操作ControllerRequestMapping(/online)public class SessionController {AutowiredSessionService sessionService;RequestMapping(/index)public String online() {return online;}ResponseBodyRequestMapping(/list)public List list() {return sessionService.list();}ResponseBodyRequestMapping(/forceLogout)public AjaxResult forceLogout(String id) {try {sessionService.forceLogout(id);return AjaxResult.success();} catch (Exception e) {e.printStackTrace();return AjaxResult.error(踢出用户失败);}}}页面我们编写一个online.html页面用于展示所有在线用户的信息在线用户管理table {margin: 20px 40px 20px 0px;width: 100%;border-collapse: collapse;border-spacing: 0;table-layout: automatic;word-wrap: break-all}table tbody tr:nth-of-type(odd) {background-color: #F7F7F7}th, td {padding: 8px;text-align: left;vertical-align: middle;font-weight: normal;font-size: 12px;border-bottom: 1px solid #fff;}th {padding-bottom: 10px;color: #fff;font-weight: 700;background: rgba(66, 185, 131, .9)}td {border-bottom-width: 1px}在线用户数序号用户名称登录时间最后访问时间主机状态操作返回var ctx [[{/}]];$.get(ctx online/list, {}, function (r) {console.log(r);var length r.length;$(#onlineCount).text(length);var html ;for (var i 0; i length; i) {html (i 1) r[i].username r[i].startTimestamp r[i].lastAccessTime r[i].host r[i].status 下线 ;}$(table).append(html);}, json);function offline(id, status) {if (status 离线) {alert(该用户已是离线状态);return;}$.get(ctx online/forceLogout, {id: id}, function (r) {if (r.code 0) {alert(该用户已强制下线);location.href ctx online/index;} else {alert(r.msg);}}, json);}在index.html中加入该页面的入口xmlns:thhttp://www.thymeleaf.orgxmlns:shirohttp://www.pollix.at/thymeleaf/shiro首页div {border: 1px dashed #ddd;padding: 10px;margin: 10px 10px 10px 0px;}你好[[${user.userName}]]你的角色为超级管理员你的角色为测试账户获取用户信息新增用户删除用户在线用户管理注销测试在主界面点击“在线用户管理”下线按钮成功将其强制踢出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

寻求网站建设技术怀柔网站建设优化seo

根据Github Trendings的统计,今日(2024-03-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目2Python项目2非开发语言项目2HTML项目1CSS项目1Dart项目1TypeScript项目1Go项目1JavaScript项目1《Hello 算法》:动画图解、一键运行的…

oucaiclub_cheapter1

Part1 代码练习 螺旋分类实验过程 初始准备生成样本线性模型分类神经网络分类反思总结 问题与解决 首次尝试中,在进行神经网络分类时,损失和准确率的结果与线性模型基本一样,没有明显改善。检查错误后,发现在设置优…

2025年9月训练记录

2025年9月训练记录2025/9/26 abc416_f 题意:树上选\(k\)条不相交的链,使得其贡献和最大. 可以考虑树形\(dp\). 考虑状态的设计如下:设\(dp_{u,i,0/1/2}\)表示当前选了以\(u\)为根的子树,且当前子树的根节点的状态为…

20250925 之所思 - 人生如梦

20250925 之所思9月23日,秋分,我最喜欢的节气;在南方,“桦加沙”很快就要在广东沿海登陆...收到了这两年来对自己最重要的邮件,被任命为中国区部门的软件discipline经理。非常感慨,十多年的奋斗不止,终于在这一…

在CodeBolcks下wxSmith的C++编程教程——在屏幕上绘图和保存绘图

0.前言欢迎来到 wxSmith 教程页面!wxSmith 与 Code::Blocks、wxWidgets 和 C++ 编译器相结合,为您提供一种所见即所得的方式来创建具有图形用户界面 (GUI) 的应用程序。该组合形成了一个用于快速应用程序开发 (RA…

怎么用网站做chm中国电子政务网站建设意见

概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。 很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。 在Java项目中调用第三方接口…

苍穹外卖-day07(缓存菜品,缓存套餐,添加购物车,查看购物车,清空购物车) - a

苍穹外卖-day07(缓存菜品,缓存套餐,添加购物车,查看购物车,清空购物车) 课程内容缓存菜品 缓存套餐 添加购物车 查看购物车 清空购物车功能实现:缓存商品、购物车 效果图:1. 缓存菜品 1.1 问题说明 用户端小程…

一次CPU飙升问题排查定位

操作流程CPU飙升问题定位:定位高CPU进程 进程内高CPU线程 top -Hp [PID] jstack [PID] grep -A 20 [十六进制TID]抓取线程栈/arthas工具attach进程后profiler生成火焰图 2.排查常见原因 代码逻辑问题:死循环、递归爆…

ros2 control 2

controller 创建一个pkg,在pkg中新建一个controller.yaml。点击查看代码 controller_manager:ros__parameters:update_rate: 50joint_state_broadcaster:type: joint_state_broadcaster/JointStateBroadcasterdiff_dr…

基于洞察的智能编程法——从直觉到代码的原型炼成术

本文基于分析心理学的知识,介绍一种针对 Ni 主导人格设计的高效 AI 编程工具使用方式,旨在将 Ni 主导者对系统演化路径的深层洞察转化为可规模化、可验证、高效落地的技术产出。基于洞察的智能编程法——从直觉到代码…

lc1036-逃离大迷宫

难度:困难题目描述原题示例 输入:blocked = [[0,1],[1,0]], source = [0,0], target = [0,2] 输出:false输入:blocked = [], source = [0,0], target = [999999,999999] 输出:true题解思路:bfs golang 写得不好,…

做后期哪个网站素材好博纳网络科技有限公司

函数是将具有独立功能的代码块组成一个整体,使其具有特殊功能的代码集。它将复杂的算法过程分解为若干个小任务,隐藏相关细节,使得程序结构更加清晰,易于维护。通过接收输入参数完成一段算法指令,输出或存储相关结果。…

防城港网站seo免费申请网站 主机 空间

软件架构之计算机网络 第 4 章 计算机网络4.1 网络架构与协议4.1.1 网络互联模型4.1.2 常见的网络协议4.1.3 IPv6 4.2 局域网与广域网4.2.2 无线局域网4.2.3 广域网技术4.2.4 网络接入技术 4.3 网络互连与常用设备4.4 网络工程4.4.1 网络规划4.4.2 网络设计4.4.3 网络实施 4.5 …

9.25学习笔记

环境速览( 节点 新装组件 端口 备注 node1 Hive3.1.3 + MySQL 8.0 + Spark3.5.0 3306/10000/8080 HiveServer2 WebUI node2 Spark HistoryServer 18080 日志持久化到 HDFS node3 Kafka 3.7.0 + ZooKeeper(复用) 9092 …

新学期每日总结(第4天)

相较昨日复习了Java知识

wordpress 邮箱 通知成都网站优化哪家好

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.M…

外贸长尾关键词挖掘网站关键词排名点击软件网站

目录 前言 1、文件目录 2、安装依赖 3、POM项目实战-案例:打开指定页面 目录结构: pages中的代码: cases中的代码: 4、解决登录问题 问题: 解决方案: 获取登录的用户信息(cookie&a…

网站怎么做边框网页版微信会留下记录吗

【判断题】在竞争激烈的市场环境中,职业生的就业优势是证书【简答题】请把今天的语文作业拍照、语音上传,谢谢!【简答题】请把今天的语文作业拍照上传,今日古诗语音上传,谢谢!【简答题】请把今天的作业拍照、语音上传,谢谢!【判断题】职业纵向发展只体现在技术和职务提升。【判…

VSCode 升级 C++支持版本

下载最新版本mingw:https://github.com/niXman/mingw-builds-binaries/releases 解压,覆盖原mingw路径 修改vscode c++插件配置 执行gcc -v -E -x c++ - 添加 starts here后的路径到系统include path中 指定C/C++版本…

太原模板建站定制网站爱站网工具包

软件架构是任何软件项目成功的关键。良好的架构不仅能够支撑软件的功能实现,还能确保其性能、可维护性、可扩展性和安全性。在软件工程领域,经过多年的研究和实践,已经总结出了许多宝贵的原则和模式,用以指导软件架构的设计。以下…