Skip to content

Commit b49bf82

Browse files
committed
Fix #34795: include version number in Redis session keys
1 parent 663d179 commit b49bf82

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/RedisSessionConfig.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.boot.actuate.health.HealthIndicator;
2727
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2828
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
29+
import org.springframework.boot.info.BuildProperties;
2930
import org.springframework.context.annotation.Bean;
3031
import org.springframework.context.annotation.Configuration;
3132
import org.springframework.context.annotation.Import;
@@ -49,12 +50,13 @@ public class RedisSessionConfig {
4950
private final String redisNamespace;
5051
private final Environment environment;
5152

52-
public RedisSessionConfig(IdentifierService identifierService, Environment environment) {
53+
public RedisSessionConfig(IdentifierService identifierService, Environment environment, BuildProperties buildProperties) {
5354
this.environment = environment;
55+
String version = buildProperties.getVersion().replace(".", "_").replace("-", "_");
5456
if (identifierService.realmId != null) {
55-
redisNamespace = String.format("shinyproxy__%s__%s", identifierService.realmId, RedisIndexedSessionRepository.DEFAULT_NAMESPACE);
57+
redisNamespace = String.format("shinyproxy__%s__%s__%s", identifierService.realmId, version, RedisIndexedSessionRepository.DEFAULT_NAMESPACE);
5658
} else {
57-
redisNamespace = String.format("shinyproxy__%s", RedisIndexedSessionRepository.DEFAULT_NAMESPACE);
59+
redisNamespace = String.format("shinyproxy__%s__%s", version, RedisIndexedSessionRepository.DEFAULT_NAMESPACE);
5860
}
5961
}
6062

@@ -106,8 +108,7 @@ class SafeRedisSessionMapper implements BiFunction<String, Map<String, Object>,
106108
public MapSession apply(String sessionId, Map<String, Object> map) {
107109
try {
108110
return this.delegate.apply(sessionId, map);
109-
}
110-
catch (IllegalStateException ex) {
111+
} catch (IllegalStateException ex) {
111112
// do not invoke RedisIndexedSessionRepository#deleteById to avoid an infinite loop because the method also invokes this mapper
112113
redisOperations.delete(getRedisNamespace() + ":sessions:" + sessionId);
113114
return null;

src/main/java/eu/openanalytics/containerproxy/auth/impl/oidc/redis/RedisOAuth2AuthorizedClientService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
*/
2121
package eu.openanalytics.containerproxy.auth.impl.oidc.redis;
2222

23+
import eu.openanalytics.containerproxy.RedisSessionConfig;
2324
import org.slf4j.Logger;
2425
import org.slf4j.LoggerFactory;
2526
import org.springframework.data.redis.core.HashOperations;
@@ -38,13 +39,16 @@ public class RedisOAuth2AuthorizedClientService implements OAuth2AuthorizedClien
3839
@Inject
3940
private RedisTemplate<String, OAuth2AuthorizedClient> redisTemplate;
4041

42+
@Inject
43+
private RedisSessionConfig redisSessionConfig;
44+
4145
private String redisKey;
4246

4347
private HashOperations<String, String, OAuth2AuthorizedClient> ops;
4448

4549
@PostConstruct
4650
public void init() {
47-
redisKey = "shinyproxy_spring_oauth_authorized_clients__";
51+
redisKey = redisSessionConfig.getRedisNamespace() + "_oauth_authorized_clients__";
4852
ops = redisTemplate.opsForHash();
4953
}
5054

0 commit comments

Comments
 (0)