mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2026-02-18 14:16:25 +08:00
issue #69 添加Session的支持
This commit is contained in:
@@ -8,9 +8,9 @@ import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
public class SessionManagerImpl implements WxSessionManager, InternalSessionManager {
|
||||
public class InMemorySessionManager implements WxSessionManager, InternalSessionManager {
|
||||
|
||||
protected final Logger log = LoggerFactory.getLogger(SessionManagerImpl.class);
|
||||
protected final Logger log = LoggerFactory.getLogger(InMemorySessionManager.class);
|
||||
|
||||
protected static final StringManager sm =
|
||||
StringManager.getManager(Constants.Package);
|
||||
@@ -105,6 +105,11 @@ public class SessionManagerImpl implements WxSessionManager, InternalSessionMana
|
||||
*/
|
||||
protected int processExpiresFrequency = 6;
|
||||
|
||||
/**
|
||||
* background processor delay in seconds
|
||||
*/
|
||||
protected int backgroundProcessorDelay = 10;
|
||||
|
||||
/**
|
||||
* 后台清理线程是否已经开启
|
||||
*/
|
||||
@@ -204,7 +209,7 @@ public class SessionManagerImpl implements WxSessionManager, InternalSessionMana
|
||||
while (true) {
|
||||
try {
|
||||
// 每秒清理一次
|
||||
Thread.sleep(1000l);
|
||||
Thread.sleep(backgroundProcessorDelay * 1000l);
|
||||
backgroundProcess();
|
||||
} catch (InterruptedException e) {
|
||||
log.error("SessionManagerImpl.backgroundProcess error", e);
|
||||
@@ -225,6 +230,7 @@ public class SessionManagerImpl implements WxSessionManager, InternalSessionMana
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -269,6 +275,34 @@ public class SessionManagerImpl implements WxSessionManager, InternalSessionMana
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setMaxInactiveInterval(int interval) {
|
||||
|
||||
this.maxInactiveInterval = interval;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the manager checks frequency.
|
||||
*
|
||||
* @param processExpiresFrequency the new manager checks frequency
|
||||
*/
|
||||
@Override
|
||||
public void setProcessExpiresFrequency(int processExpiresFrequency) {
|
||||
|
||||
if (processExpiresFrequency <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.processExpiresFrequency = processExpiresFrequency;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackgroundProcessorDelay(int backgroundProcessorDelay) {
|
||||
this.backgroundProcessorDelay = backgroundProcessorDelay;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the descriptive short name of this Manager implementation.
|
||||
*/
|
||||
@@ -10,7 +10,7 @@ public class InternalSessionFacade implements WxSession {
|
||||
private WxSession session = null;
|
||||
|
||||
public InternalSessionFacade(WxSession session) {
|
||||
session = session;
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -60,4 +60,15 @@ public interface InternalSessionManager {
|
||||
*/
|
||||
public void backgroundProcess();
|
||||
|
||||
/**
|
||||
* Set the default maximum inactive interval (in seconds)
|
||||
* for Sessions created by this Manager.
|
||||
*
|
||||
* @param interval The new default value
|
||||
*/
|
||||
void setMaxInactiveInterval(int interval);
|
||||
|
||||
void setProcessExpiresFrequency(int processExpiresFrequency);
|
||||
|
||||
void setBackgroundProcessorDelay(int backgroundProcessorDelay);
|
||||
}
|
||||
|
||||
@@ -308,4 +308,40 @@ public class SessionImpl implements WxSession, InternalSession {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof SessionImpl)) return false;
|
||||
|
||||
SessionImpl session = (SessionImpl) o;
|
||||
|
||||
if (creationTime != session.creationTime) return false;
|
||||
if (expiring != session.expiring) return false;
|
||||
if (isValid != session.isValid) return false;
|
||||
if (maxInactiveInterval != session.maxInactiveInterval) return false;
|
||||
if (thisAccessedTime != session.thisAccessedTime) return false;
|
||||
if (!accessCount.equals(session.accessCount)) return false;
|
||||
if (!attributes.equals(session.attributes)) return false;
|
||||
if (!facade.equals(session.facade)) return false;
|
||||
if (!id.equals(session.id)) return false;
|
||||
if (!manager.equals(session.manager)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = attributes.hashCode();
|
||||
result = 31 * result + id.hashCode();
|
||||
result = 31 * result + (isValid ? 1 : 0);
|
||||
result = 31 * result + (expiring ? 1 : 0);
|
||||
result = 31 * result + manager.hashCode();
|
||||
result = 31 * result + (int) (creationTime ^ (creationTime >>> 32));
|
||||
result = 31 * result + (int) (thisAccessedTime ^ (thisAccessedTime >>> 32));
|
||||
result = 31 * result + maxInactiveInterval;
|
||||
result = 31 * result + facade.hashCode();
|
||||
result = 31 * result + accessCount.hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user