|
|
|
@ -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
|
|
|
|
|