From 2317788ec16cfe90ea2f1cb66a1df9337017d42b Mon Sep 17 00:00:00 2001 From: wangxy <1481820854@qq.com> Date: Tue, 20 May 2025 16:14:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E5=BD=92=E6=A1=A3=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shiro/session/OnlineSessionDAO.java | 252 +++++++++--------- .../shiro/session/OnlineSessionFactory.java | 112 ++++---- 2 files changed, 182 insertions(+), 182 deletions(-) diff --git a/src/main/java/com/archive/framework/shiro/session/OnlineSessionDAO.java b/src/main/java/com/archive/framework/shiro/session/OnlineSessionDAO.java index 31ab867..72588c6 100644 --- a/src/main/java/com/archive/framework/shiro/session/OnlineSessionDAO.java +++ b/src/main/java/com/archive/framework/shiro/session/OnlineSessionDAO.java @@ -1,131 +1,131 @@ -/* */ package com.archive.framework.shiro.session + package com.archive.framework.shiro.session ; -/* */ -/* */ import com.archive.framework.manager.AsyncManager; -/* */ import com.archive.framework.manager.factory.AsyncFactory; -/* */ import com.archive.framework.shiro.session.OnlineSessionFactory; -/* */ import com.archive.project.monitor.online.domain.OnlineSession; -/* */ import com.archive.project.monitor.online.domain.UserOnline; -/* */ import com.archive.project.monitor.online.service.IUserOnlineService; -/* */ import java.io.Serializable; -/* */ import java.util.Date; -/* */ import org.apache.shiro.session.Session; -/* */ import org.apache.shiro.session.UnknownSessionException; -/* */ import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO; -/* */ import org.springframework.beans.factory.annotation.Autowired; -/* */ import org.springframework.beans.factory.annotation.Value; -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ public class OnlineSessionDAO -/* */ extends EnterpriseCacheSessionDAO -/* */ { -/* */ @Value("${shiro.session.dbSyncPeriod}") -/* */ private int dbSyncPeriod; -/* 32 */ private static final String LAST_SYNC_DB_TIMESTAMP = com.archive.framework.shiro.session.OnlineSessionDAO.class.getName() + "LAST_SYNC_DB_TIMESTAMP"; -/* */ -/* */ -/* */ -/* */ -/* */ @Autowired -/* */ private IUserOnlineService onlineService; -/* */ -/* */ -/* */ -/* */ @Autowired -/* */ private OnlineSessionFactory onlineSessionFactory; -/* */ -/* */ -/* */ -/* */ -/* */ public OnlineSessionDAO() {} -/* */ -/* */ -/* */ -/* */ -/* */ public OnlineSessionDAO(long expireTime) {} -/* */ -/* */ -/* */ -/* */ -/* */ protected Session doReadSession(Serializable sessionId) { -/* 59 */ UserOnline userOnline = this.onlineService.selectOnlineById(String.valueOf(sessionId)); -/* 60 */ if (userOnline == null) -/* */ { -/* 62 */ return null; -/* */ } -/* 64 */ return this.onlineSessionFactory.createSession(userOnline); -/* */ } -/* */ -/* */ -/* */ -/* */ public void update(Session session) throws UnknownSessionException { -/* 70 */ super.update(session); -/* */ } -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ public void syncToDb(OnlineSession onlineSession) { -/* 78 */ Date lastSyncTimestamp = (Date)onlineSession.getAttribute(LAST_SYNC_DB_TIMESTAMP); -/* 79 */ if (lastSyncTimestamp != null) { -/* */ -/* 81 */ boolean needSync = true; -/* 82 */ long deltaTime = onlineSession.getLastAccessTime().getTime() - lastSyncTimestamp.getTime(); -/* 83 */ if (deltaTime < (this.dbSyncPeriod * 60 * 1000)) -/* */ { -/* */ -/* 86 */ needSync = false; -/* */ } -/* */ -/* 89 */ boolean isGuest = (onlineSession.getUserId() == null || onlineSession.getUserId().longValue() == 0L); -/* */ -/* */ -/* 92 */ if (!isGuest && onlineSession.isAttributeChanged()) -/* */ { -/* 94 */ needSync = true; -/* */ } -/* */ -/* 97 */ if (!needSync) { -/* */ return; -/* */ } -/* */ } -/* */ -/* */ -/* 103 */ onlineSession.setAttribute(LAST_SYNC_DB_TIMESTAMP, onlineSession.getLastAccessTime()); -/* */ -/* 105 */ if (onlineSession.isAttributeChanged()) -/* */ { -/* 107 */ onlineSession.resetAttributeChanged(); -/* */ } -/* 109 */ AsyncManager.me().execute(AsyncFactory.syncSessionToDb(onlineSession)); -/* */ } -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ protected void doDelete(Session session) { -/* 118 */ OnlineSession onlineSession = (OnlineSession)session; -/* 119 */ if (null == onlineSession) { -/* */ return; -/* */ } -/* */ -/* 123 */ onlineSession.setStatus(OnlineSession.OnlineStatus.off_line); -/* 124 */ this.onlineService.deleteOnlineById(String.valueOf(onlineSession.getId())); -/* */ } -/* */ } + + import com.archive.framework.manager.AsyncManager; + import com.archive.framework.manager.factory.AsyncFactory; + import com.archive.framework.shiro.session.OnlineSessionFactory; + import com.archive.project.monitor.online.domain.OnlineSession; + import com.archive.project.monitor.online.domain.UserOnline; + import com.archive.project.monitor.online.service.IUserOnlineService;f + import java.io.Serializable; + import java.util.Date; + import org.apache.shiro.session.Session; + import org.apache.shiro.session.UnknownSessionException; + import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO; + import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.beans.factory.annotation.Value; + + + + + + + + + + + + public class OnlineSessionDAO + extends EnterpriseCacheSessionDAO + { + @Value("${shiro.session.dbSyncPeriod}") + private int dbSyncPeriod; + private static final String LAST_SYNC_DB_TIMESTAMP = com.archive.framework.shiro.session.OnlineSessionDAO.class.getName() + "LAST_SYNC_DB_TIMESTAMP"; + + + + + @Autowired + private IUserOnlineService onlineService; + + + + @Autowired + private OnlineSessionFactory onlineSessionFactory; + + + + + public OnlineSessionDAO() {} + + + + + public OnlineSessionDAO(long expireTime) {} + + + + + protected Session doReadSession(Serializable sessionId) { + UserOnline userOnline = this.onlineService.selectOnlineById(String.valueOf(sessionId)); + if (userOnline == null) + { + return null; + } + return this.onlineSessionFactory.createSession(userOnline); + } + + + + public void update(Session session) throws UnknownSessionException { + super.update(session); + } + + + + + + public void syncToDb(OnlineSession onlineSession) { + Date lastSyncTimestamp = (Date)onlineSession.getAttribute(LAST_SYNC_DB_TIMESTAMP); + if (lastSyncTimestamp != null) { + + boolean needSync = true; + long deltaTime = onlineSession.getLastAccessTime().getTime() - lastSyncTimestamp.getTime(); + if (deltaTime < (this.dbSyncPeriod * 60 * 1000)) + { + + needSync = false; + } + + boolean isGuest = (onlineSession.getUserId() == null || onlineSession.getUserId().longValue() == 0L); + + + if (!isGuest && onlineSession.isAttributeChanged()) + { + needSync = true; + } + + if (!needSync) { + return; + } + } + + + onlineSession.setAttribute(LAST_SYNC_DB_TIMESTAMP, onlineSession.getLastAccessTime()); + + if (onlineSession.isAttributeChanged()) + { + onlineSession.resetAttributeChanged(); + } + AsyncManager.me().execute(AsyncFactory.syncSessionToDb(onlineSession)); + } + + + + + + + protected void doDelete(Session session) { + OnlineSession onlineSession = (OnlineSession)session; + if (null == onlineSession) { + return; + } + + onlineSession.setStatus(OnlineSession.OnlineStatus.off_line); + this.onlineService.deleteOnlineById(String.valueOf(onlineSession.getId())); + } + } /* Location: C:\Users\Administrator\Desktop\extracted.zip!\extracted\BOOT-INF\classes\com\archive\framework\shiro\session\OnlineSessionDAO.class diff --git a/src/main/java/com/archive/framework/shiro/session/OnlineSessionFactory.java b/src/main/java/com/archive/framework/shiro/session/OnlineSessionFactory.java index a7d72b0..70fccf5 100644 --- a/src/main/java/com/archive/framework/shiro/session/OnlineSessionFactory.java +++ b/src/main/java/com/archive/framework/shiro/session/OnlineSessionFactory.java @@ -1,61 +1,61 @@ -/* */ package com.archive.framework.shiro.session + package com.archive.framework.shiro.session ; -/* */ -/* */ import com.archive.common.utils.IpUtils; -/* */ import com.archive.common.utils.ServletUtils; -/* */ import com.archive.common.utils.StringUtils; -/* */ import com.archive.project.monitor.online.domain.OnlineSession; -/* */ import com.archive.project.monitor.online.domain.UserOnline; -/* */ import eu.bitwalker.useragentutils.UserAgent; -/* */ import javax.servlet.http.HttpServletRequest; -/* */ import org.apache.shiro.session.Session; -/* */ import org.apache.shiro.session.mgt.SessionContext; -/* */ import org.apache.shiro.session.mgt.SessionFactory; -/* */ import org.apache.shiro.web.session.mgt.WebSessionContext; -/* */ import org.springframework.stereotype.Component; -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ -/* */ @Component -/* */ public class OnlineSessionFactory -/* */ implements SessionFactory -/* */ { -/* */ public Session createSession(UserOnline userOnline) { -/* 26 */ OnlineSession onlineSession = userOnline.getSession(); -/* 27 */ if (StringUtils.isNotNull(onlineSession) && onlineSession.getId() == null) -/* */ { -/* 29 */ onlineSession.setId(userOnline.getSessionId()); -/* */ } -/* 31 */ return (Session)userOnline.getSession(); -/* */ } -/* */ -/* */ -/* */ -/* */ public Session createSession(SessionContext initData) { -/* 37 */ OnlineSession session = new OnlineSession(); -/* 38 */ if (initData != null && initData instanceof WebSessionContext) { -/* */ -/* 40 */ WebSessionContext sessionContext = (WebSessionContext)initData; -/* 41 */ HttpServletRequest request = (HttpServletRequest)sessionContext.getServletRequest(); -/* 42 */ if (request != null) { -/* */ -/* 44 */ UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); -/* */ -/* 46 */ String os = userAgent.getOperatingSystem().getName(); -/* */ -/* 48 */ String browser = userAgent.getBrowser().getName(); -/* 49 */ session.setHost(IpUtils.getIpAddr(request)); -/* 50 */ session.setBrowser(browser); -/* 51 */ session.setOs(os); -/* */ } -/* */ } -/* 54 */ return (Session)session; -/* */ } -/* */ } + + import com.archive.common.utils.IpUtils; + import com.archive.common.utils.ServletUtils; + import com.archive.common.utils.StringUtils; + import com.archive.project.monitor.online.domain.OnlineSession; + import com.archive.project.monitor.online.domain.UserOnline; + import eu.bitwalker.useragentutils.UserAgent; + import javax.servlet.http.HttpServletRequest; + import org.apache.shiro.session.Session; + import org.apache.shiro.session.mgt.SessionContext; + import org.apache.shiro.session.mgt.SessionFactory; + import org.apache.shiro.web.session.mgt.WebSessionContext; + import org.springframework.stereotype.Component; + + + + + + + @Component + public class OnlineSessionFactory + implements SessionFactory + { + public Session createSession(UserOnline userOnline) { + OnlineSession onlineSession = userOnline.getSession(); + if (StringUtils.isNotNull(onlineSession) && onlineSession.getId() == null) + { + onlineSession.setId(userOnline.getSessionId()); + } + return (Session)userOnline.getSession(); + } + + + + public Session createSession(SessionContext initData) { + OnlineSession session = new OnlineSession(); + if (initData != null && initData instanceof WebSessionContext) { + + WebSessionContext sessionContext = (WebSessionContext)initData; + HttpServletRequest request = (HttpServletRequest)sessionContext.getServletRequest(); + if (request != null) { + + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + + String os = userAgent.getOperatingSystem().getName(); + + String browser = userAgent.getBrowser().getName(); + session.setHost(IpUtils.getIpAddr(request)); + session.setBrowser(browser); + session.setOs(os); + } + } + return (Session)session; + } + } /* Location: C:\Users\Administrator\Desktop\extracted.zip!\extracted\BOOT-INF\classes\com\archive\framework\shiro\session\OnlineSessionFactory.class