Tangles in RedisOperationsSessionRepository

Issue: gh-900
This commit is contained in:
Rob Winch
2017-10-22 21:22:54 -05:00
parent df7ab9d99e
commit 8b9d421ad6
3 changed files with 10 additions and 8 deletions

View File

@@ -334,7 +334,7 @@ public class RedisOperationsSessionRepository implements
Assert.notNull(sessionRedisOperations, "sessionRedisOperations cannot be null");
this.sessionRedisOperations = sessionRedisOperations;
this.expirationPolicy = new RedisSessionExpirationPolicy(sessionRedisOperations,
this);
this::getExpirationsKey, this::getSessionKey);
}
/**

View File

@@ -20,6 +20,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -51,14 +52,15 @@ final class RedisSessionExpirationPolicy {
.getLog(RedisSessionExpirationPolicy.class);
private final RedisOperations<Object, Object> redis;
private final RedisOperationsSessionRepository redisSession;
private final Function<Long, String> lookupExpirationKey;
private final Function<String, String> lookupSessionKey;
RedisSessionExpirationPolicy(RedisOperations<Object, Object> sessionRedisOperations,
RedisOperationsSessionRepository redisSession) {
Function<Long, String> lookupExpirationKey, Function<String, String> lookupSessionKey) {
super();
this.redis = sessionRedisOperations;
this.redisSession = redisSession;
this.lookupExpirationKey = lookupExpirationKey;
this.lookupSessionKey = lookupSessionKey;
}
public void onDelete(Session session) {
@@ -111,11 +113,11 @@ final class RedisSessionExpirationPolicy {
}
String getExpirationKey(long expires) {
return this.redisSession.getExpirationsKey(expires);
return this.lookupExpirationKey.apply(expires);
}
String getSessionKey(String sessionId) {
return this.redisSession.getSessionKey(sessionId);
return this.lookupSessionKey.apply(sessionId);
}
public void cleanExpiredSessions() {

View File

@@ -66,7 +66,7 @@ public class RedisSessionExpirationPolicyTests {
RedisOperationsSessionRepository repository = new RedisOperationsSessionRepository(
this.sessionRedisOperations);
this.policy = new RedisSessionExpirationPolicy(this.sessionRedisOperations,
repository);
repository::getExpirationsKey, repository::getSessionKey);
this.session = new MapSession();
this.session.setLastAccessedTime(Instant.ofEpochMilli(1429116694675L));
this.session.setId("12345");