Remove attribute key and value from Redis
Closes gh-1331
This commit is contained in:
@@ -18,6 +18,7 @@ package org.springframework.session.data.redis;
|
|||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@@ -134,6 +135,22 @@ class RedisIndexedSessionRepositoryITests extends AbstractRedisITests {
|
|||||||
.isEqualTo(expectedAttributeValue);
|
.isEqualTo(expectedAttributeValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void removeAttributeRemovedAttributeKey() {
|
||||||
|
RedisSession toSave = this.repository.createSession();
|
||||||
|
toSave.setAttribute("a", "b");
|
||||||
|
this.repository.save(toSave);
|
||||||
|
|
||||||
|
toSave.removeAttribute("a");
|
||||||
|
this.repository.save(toSave);
|
||||||
|
|
||||||
|
String id = toSave.getId();
|
||||||
|
String key = "RedisIndexedSessionRepositoryITests:sessions:" + id;
|
||||||
|
|
||||||
|
Set<Map.Entry<Object, Object>> entries = this.redis.boundHashOps(key).entries().entrySet();
|
||||||
|
assertThat(entries).extracting(Map.Entry::getKey).doesNotContain("sessionAttr:a");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void putAllOnSingleAttrDoesNotRemoveOld() {
|
void putAllOnSingleAttrDoesNotRemoveOld() {
|
||||||
RedisSession toSave = this.repository.createSession();
|
RedisSession toSave = this.repository.createSession();
|
||||||
|
|||||||
@@ -792,7 +792,8 @@ public class RedisIndexedSessionRepository
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String sessionId = getId();
|
String sessionId = getId();
|
||||||
getSessionBoundHashOperations(sessionId).putAll(this.delta);
|
BoundHashOperations<Object, Object, Object> boundHashOperations = getSessionBoundHashOperations(sessionId);
|
||||||
|
boundHashOperations.putAll(this.delta);
|
||||||
String principalSessionKey = getSessionAttrNameKey(
|
String principalSessionKey = getSessionAttrNameKey(
|
||||||
FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME);
|
FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME);
|
||||||
String securityPrincipalSessionKey = getSessionAttrNameKey(SPRING_SECURITY_CONTEXT);
|
String securityPrincipalSessionKey = getSessionAttrNameKey(SPRING_SECURITY_CONTEXT);
|
||||||
@@ -811,6 +812,11 @@ public class RedisIndexedSessionRepository
|
|||||||
.add(sessionId);
|
.add(sessionId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (final Map.Entry<String, Object> attribute : this.delta.entrySet()) {
|
||||||
|
if (attribute.getValue() == null) {
|
||||||
|
boundHashOperations.delete(attribute.getKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.delta = new HashMap<>(this.delta.size());
|
this.delta = new HashMap<>(this.delta.size());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user