This commit is contained in:
MaxKey 2022-04-26 18:29:58 +08:00
parent e51a3a25ba
commit 9221064088
7 changed files with 53 additions and 47 deletions

View File

@ -47,11 +47,11 @@ public class AbstractSessionService implements SessionService{
"update mxk_history_login set logouttime = ? ,sessionstatus = 7 where sessionid = ?";
@Override
public List<HistoryLogin> queryOnlineTicket() {
List<HistoryLogin> listOnlineTicket = jdbcTemplate.query(
public List<HistoryLogin> querySessions() {
List<HistoryLogin> listSessions = jdbcTemplate.query(
DEFAULT_DEFAULT_SELECT_STATEMENT,
new OnlineTicketRowMapper());
return listOnlineTicket;
return listSessions;
}
public void profileLastLogoffTime(String userId,String lastLogoffTime) {
@ -93,27 +93,27 @@ public class AbstractSessionService implements SessionService{
}
@Override
public void store(String ticketId, Session ticket) {
public void store(String sessionId, Session session) {
}
@Override
public Session remove(String ticket) {
public Session remove(String sessionId) {
return null;
}
@Override
public Session get(String ticketId) {
public Session get(String sessionId) {
return null;
}
@Override
public void refresh(String ticketId, LocalTime refreshTime) {
public void refresh(String sessionId, LocalTime refreshTime) {
}
@Override
public void refresh(String ticketId) {
public void refresh(String sessionId) {
}

View File

@ -58,25 +58,25 @@ public class RedisSessionService extends AbstractSessionService {
}
@Override
public void store(String ticketId, Session ticket) {
public void store(String sessionId, Session ticket) {
RedisConnection conn=connectionFactory.getConnection();
conn.setexObject(PREFIX+ticketId, serviceTicketValiditySeconds, ticket);
conn.setexObject(PREFIX+sessionId, serviceTicketValiditySeconds, ticket);
conn.close();
}
@Override
public Session remove(String ticketId) {
public Session remove(String sessionId) {
RedisConnection conn=connectionFactory.getConnection();
Session ticket = conn.getObject(PREFIX+ticketId);
conn.delete(PREFIX+ticketId);
Session ticket = conn.getObject(PREFIX+sessionId);
conn.delete(PREFIX+sessionId);
conn.close();
return ticket;
}
@Override
public Session get(String ticketId) {
public Session get(String sessionId) {
RedisConnection conn=connectionFactory.getConnection();
Session session = conn.getObject(PREFIX+ticketId);
Session session = conn.getObject(PREFIX+sessionId);
conn.close();
return session;
}
@ -95,8 +95,8 @@ public class RedisSessionService extends AbstractSessionService {
}
@Override
public void refresh(String ticketId) {
Session session = get(ticketId);
public void refresh(String sessionId) {
Session session = get(sessionId);
LocalTime currentTime = LocalTime.now();
Duration duration = Duration.between(currentTime, session.getLastAccessTime());
@ -105,7 +105,7 @@ public class RedisSessionService extends AbstractSessionService {
if(duration.getSeconds() > Session.MAX_EXPIRY_DURATION) {
session.setLastAccessTime(currentTime);
refresh(ticketId,currentTime);
refresh(sessionId,currentTime);
}
}

View File

@ -24,19 +24,19 @@ import org.maxkey.entity.HistoryLogin;
public interface SessionService {
public void store(String ticketId, Session ticket);
public void store(String sessionId, Session session);
public Session remove(String ticket);
public Session remove(String sessionId);
public Session get(String ticketId);
public Session get(String sessionId);
public void refresh(String ticketId ,LocalTime refreshTime);
public void refresh(String sessionId ,LocalTime refreshTime);
public void refresh(String ticketId);
public void refresh(String sessionId);
public void setValiditySeconds(int validitySeconds);
public List<HistoryLogin> queryOnlineTicket();
public List<HistoryLogin> querySessions();
public void terminate(String onlineTicket,String userId,String username);
public void terminate(String sessionId,String userId,String username);
}

View File

@ -39,24 +39,27 @@ public class InMemoryMomentaryService implements MomentaryService{
}
@Override
public void put(String ticket , String name, Object value){
momentaryStore.put(getKey(ticket,name), value);
public void put(String sessionId , String name, Object value){
_logger.trace("key {}, value {}",getSessionKey(sessionId , name),value);
momentaryStore.put(getSessionKey(sessionId,name), value);
}
@Override
public Object remove(String ticket , String name) {
Object value = momentaryStore.getIfPresent(getKey(ticket,name));
momentaryStore.invalidate(getKey(ticket,name));
public Object remove(String sessionId , String name) {
Object value = momentaryStore.getIfPresent(getSessionKey(sessionId,name));
momentaryStore.invalidate(getSessionKey(sessionId,name));
_logger.trace("key {}, value {}",getSessionKey(sessionId , name),value);
return value;
}
@Override
public Object get(String ticket , String name) {
return momentaryStore.getIfPresent(getKey(ticket,name));
public Object get(String sessionId , String name) {
_logger.trace("key {}",getSessionKey(sessionId , name));
return momentaryStore.getIfPresent(getSessionKey(sessionId,name));
}
private String getKey(String ticket , String name) {
return ticket +"_"+ name;
private String getSessionKey(String sessionId , String name) {
return sessionId + "_" + name;
}
}

View File

@ -19,10 +19,10 @@ package org.maxkey.persistence;
public interface MomentaryService {
public void put(String ticket , String name, Object value);
public void put(String sessionId , String name, Object value);
public Object get(String ticket , String name);
public Object get(String sessionId , String name);
public Object remove(String ticket , String name);
public Object remove(String sessionId , String name);
}

View File

@ -52,32 +52,35 @@ public class RedisMomentaryService implements MomentaryService {
}
@Override
public void put(String ticket , String name, Object value){
public void put(String sessionId , String name, Object value){
RedisConnection conn = connectionFactory.getConnection();
conn.setexObject(getKey(ticket , name), validitySeconds, value);
conn.setexObject(getSessionKey(sessionId , name), validitySeconds, value);
_logger.trace("key {}, validitySeconds {}, value {}",getSessionKey(sessionId , name),validitySeconds,value);
conn.close();
}
@Override
public Object get(String ticket , String name) {
public Object get(String sessionId , String name) {
RedisConnection conn = connectionFactory.getConnection();
Object value = conn.getObject(getKey(ticket , name));
Object value = conn.getObject(getSessionKey(sessionId , name));
_logger.trace("key {}, value {}",getSessionKey(sessionId , name),value);
conn.close();
return value;
}
@Override
public Object remove(String ticket, String name) {
public Object remove(String sessionId, String name) {
RedisConnection conn = connectionFactory.getConnection();
Object value = conn.getObject(getKey(ticket , name));
conn.delete(getKey(ticket , name));
Object value = conn.getObject(getSessionKey(sessionId , name));
conn.delete(getSessionKey(sessionId , name));
conn.close();
_logger.trace("key {}, value {}",getSessionKey(sessionId , name),value);
return value;
}
private String getKey(String ticket , String name) {
return PREFIX + ticket + name;
private String getSessionKey(String sessionId , String name) {
return PREFIX + sessionId + name;
}

View File

@ -41,7 +41,7 @@ public class SessionListenerJob extends AbstractScheduleJob implements Job , S
jobStatus = JOBSTATUS.RUNNING;
try {
if(sessionService != null) {
for (HistoryLogin onlineSession : sessionService.queryOnlineTicket()) {
for (HistoryLogin onlineSession : sessionService.querySessions()) {
if(sessionService.get(onlineSession.getSessionId()) == null) {
sessionService.terminate(
onlineSession.getSessionId(),