RedisOperationsSessionRepsitory only deletes once
Previously RedisOperationsSessionRepository incorrectly: * Deleted the session * Added the session * Set the expiration to be 0 This commit ensures that if the expiration is 0 that the sesson is only deleted. Fixes gh-292
This commit is contained in:
@@ -85,8 +85,12 @@ final class RedisSessionExpirationPolicy {
|
||||
String sessionKey = getSessionKey(keyToExpire);
|
||||
|
||||
expireOperations.expire(fiveMinutesAfterExpires, TimeUnit.SECONDS);
|
||||
redis.boundValueOps(sessionKey).append("");
|
||||
redis.boundValueOps(sessionKey).expire(sessionExpireInSeconds, TimeUnit.SECONDS);
|
||||
if(sessionExpireInSeconds == 0) {
|
||||
redis.delete(sessionKey);
|
||||
} else {
|
||||
redis.boundValueOps(sessionKey).append("");
|
||||
redis.boundValueOps(sessionKey).expire(sessionExpireInSeconds, TimeUnit.SECONDS);
|
||||
}
|
||||
redis.boundHashOps(getSessionKey(session.getId())).expire(fiveMinutesAfterExpires, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,8 @@
|
||||
package org.springframework.session.data.redis;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Matchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.springframework.session.data.redis.RedisOperationsSessionRepository.CREATION_TIME_ATTR;
|
||||
import static org.springframework.session.data.redis.RedisOperationsSessionRepository.LAST_ACCESSED_ATTR;
|
||||
import static org.springframework.session.data.redis.RedisOperationsSessionRepository.MAX_INACTIVE_ATTR;
|
||||
@@ -215,6 +213,21 @@ public class RedisOperationsSessionRepositoryTests {
|
||||
assertThat(getDelta()).isEqualTo(map(getSessionAttrNameKey(attrName), null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void saveExpired() {
|
||||
RedisSession session = redisRepository.new RedisSession(new MapSession());
|
||||
session.setMaxInactiveIntervalInSeconds(0);
|
||||
when(redisOperations.boundHashOps(anyString())).thenReturn(boundHashOperations);
|
||||
when(redisOperations.boundSetOps(anyString())).thenReturn(boundSetOperations);
|
||||
when(redisOperations.boundValueOps(anyString())).thenReturn(boundValueOperations);
|
||||
|
||||
redisRepository.save(session);
|
||||
|
||||
String id = session.getId();
|
||||
verify(redisOperations,atLeastOnce()).delete(getKey("expires:"+id));
|
||||
verify(redisOperations,never()).boundValueOps(getKey("expires:"+id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void redisSessionGetAttributes() {
|
||||
String attrName = "attrName";
|
||||
@@ -247,7 +260,8 @@ public class RedisOperationsSessionRepositoryTests {
|
||||
redisRepository.delete(id);
|
||||
|
||||
assertThat(getDelta().get(MAX_INACTIVE_ATTR)).isEqualTo(0);
|
||||
verify(redisOperations).delete(getKey("expires:"+id));
|
||||
verify(redisOperations,atLeastOnce()).delete(getKey("expires:"+id));
|
||||
verify(redisOperations,never()).boundValueOps(getKey("expires:"+id));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user