From 69285f2a9abe925cd7cdbe0d87fec8d1afdc7af8 Mon Sep 17 00:00:00 2001 From: Stefan Wurzinger Date: Thu, 11 Mar 2021 18:43:50 +0100 Subject: [PATCH] Fix Redis session expiration entry deletion Closes gh-585 --- .../session/data/redis/RedisSessionExpirationPolicy.java | 9 ++++++--- .../data/redis/RedisSessionExpirationPolicyTests.java | 9 ++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisSessionExpirationPolicy.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisSessionExpirationPolicy.java index 10499156..d67fbc83 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisSessionExpirationPolicy.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisSessionExpirationPolicy.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2019 the original author or authors. + * Copyright 2014-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -50,6 +50,8 @@ final class RedisSessionExpirationPolicy { private static final Log logger = LogFactory.getLog(RedisSessionExpirationPolicy.class); + private static final String SESSION_EXPIRES_PREFIX = "expires:"; + private final RedisOperations redis; private final Function lookupExpirationKey; @@ -67,11 +69,12 @@ final class RedisSessionExpirationPolicy { void onDelete(Session session) { long toExpire = roundUpToNextMinute(expiresInMillis(session)); String expireKey = getExpirationKey(toExpire); - this.redis.boundSetOps(expireKey).remove(session.getId()); + String entryToRemove = SESSION_EXPIRES_PREFIX + session.getId(); + this.redis.boundSetOps(expireKey).remove(entryToRemove); } void onExpirationUpdated(Long originalExpirationTimeInMilli, Session session) { - String keyToExpire = "expires:" + session.getId(); + String keyToExpire = SESSION_EXPIRES_PREFIX + session.getId(); long toExpire = roundUpToNextMinute(expiresInMillis(session)); if (originalExpirationTimeInMilli != null) { diff --git a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisSessionExpirationPolicyTests.java b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisSessionExpirationPolicyTests.java index af62e4b0..acad2b67 100644 --- a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisSessionExpirationPolicyTests.java +++ b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisSessionExpirationPolicyTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2019 the original author or authors. + * Copyright 2014-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -164,4 +164,11 @@ class RedisSessionExpirationPolicyTests { verify(this.hashOperations).persist(); } + @Test + void onDeleteRemoveExpirationEntry() { + this.policy.onDelete(this.session); + + verify(this.setOperations).remove("expires:" + this.session.getId()); + } + }