Fix memory leak with null principal in Redis
Closes gh-1987
This commit is contained in:
committed by
Eleftheria Stein
parent
dba22292a3
commit
12ce8de84e
@@ -527,6 +527,30 @@ class RedisIndexedSessionRepositoryITests extends AbstractRedisITests {
|
|||||||
assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId);
|
assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test // gh-1987
|
||||||
|
void changeSessionIdWhenPrincipalNameChangesFromNullThenIndexShouldNotBeCreated() {
|
||||||
|
String principalName = null;
|
||||||
|
String principalNameChanged = "findByChangedPrincipalName" + UUID.randomUUID();
|
||||||
|
RedisSession toSave = this.repository.createSession();
|
||||||
|
toSave.setAttribute(INDEX_NAME, principalName);
|
||||||
|
|
||||||
|
this.repository.save(toSave);
|
||||||
|
|
||||||
|
RedisSession findById = this.repository.findById(toSave.getId());
|
||||||
|
String changeSessionId = findById.changeSessionId();
|
||||||
|
findById.setAttribute(INDEX_NAME, principalNameChanged);
|
||||||
|
this.repository.save(findById);
|
||||||
|
|
||||||
|
Map<String, RedisSession> findByPrincipalName = this.repository.findByIndexNameAndIndexValue(INDEX_NAME,
|
||||||
|
principalName);
|
||||||
|
assertThat(findByPrincipalName).isEmpty();
|
||||||
|
|
||||||
|
findByPrincipalName = this.repository.findByIndexNameAndIndexValue(INDEX_NAME, principalNameChanged);
|
||||||
|
|
||||||
|
assertThat(findByPrincipalName).hasSize(1);
|
||||||
|
assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void changeSessionIdWhenOnlyChangeId() {
|
void changeSessionIdWhenOnlyChangeId() {
|
||||||
String attrName = "changeSessionId";
|
String attrName = "changeSessionId";
|
||||||
|
|||||||
@@ -858,11 +858,13 @@ public class RedisIndexedSessionRepository
|
|||||||
catch (NonTransientDataAccessException ex) {
|
catch (NonTransientDataAccessException ex) {
|
||||||
handleErrNoSuchKeyError(ex);
|
handleErrNoSuchKeyError(ex);
|
||||||
}
|
}
|
||||||
String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName);
|
if (this.originalPrincipalName != null) {
|
||||||
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
|
String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName);
|
||||||
.remove(this.originalSessionId);
|
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
|
||||||
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
|
.remove(this.originalSessionId);
|
||||||
.add(sessionId);
|
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
|
||||||
|
.add(sessionId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.originalSessionId = sessionId;
|
this.originalSessionId = sessionId;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user