From 2d06e647c40f4500357b5d4514ad829ff0023ce2 Mon Sep 17 00:00:00 2001 From: Sotatek-PhucNguyen5 Date: Mon, 9 Oct 2023 15:39:28 +0700 Subject: [PATCH] fix: Handle log out when edit user role in keycloak --- .../authentication/config/redis/sentinel/RedisConfig.java | 3 ++- .../authentication/provider/RedisProvider.java | 2 +- .../service/impl/AuthenticationServiceImpl.java | 7 ++++--- .../authentication/service/impl/KeycloakServiceImpl.java | 2 ++ 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/cardanofoundation/authentication/config/redis/sentinel/RedisConfig.java b/src/main/java/org/cardanofoundation/authentication/config/redis/sentinel/RedisConfig.java index 439939a0..f1dbdc5f 100644 --- a/src/main/java/org/cardanofoundation/authentication/config/redis/sentinel/RedisConfig.java +++ b/src/main/java/org/cardanofoundation/authentication/config/redis/sentinel/RedisConfig.java @@ -36,6 +36,7 @@ import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.GenericToStringSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.JedisPoolConfig; @@ -121,7 +122,7 @@ LettuceConnectionFactory lettuceConnectionFactory(RedisSentinelConfiguration sen var redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(lettuceConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); - redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Object.class)); redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; diff --git a/src/main/java/org/cardanofoundation/authentication/provider/RedisProvider.java b/src/main/java/org/cardanofoundation/authentication/provider/RedisProvider.java index 51324ec1..c45245c4 100644 --- a/src/main/java/org/cardanofoundation/authentication/provider/RedisProvider.java +++ b/src/main/java/org/cardanofoundation/authentication/provider/RedisProvider.java @@ -43,7 +43,7 @@ public boolean isTokenBlacklisted(String token) { if (Boolean.TRUE.equals(StringUtils.isNullOrEmpty(token))) { throw new BusinessException(CommonErrorCode.INVALID_TOKEN); } - return redisTemplate.opsForValue().get(RedisConstant.JWT + token) != null; + return Boolean.TRUE.equals(redisTemplate.hasKey(RedisConstant.JWT + token)); } /* diff --git a/src/main/java/org/cardanofoundation/authentication/service/impl/AuthenticationServiceImpl.java b/src/main/java/org/cardanofoundation/authentication/service/impl/AuthenticationServiceImpl.java index 97f998c4..87edeeca 100644 --- a/src/main/java/org/cardanofoundation/authentication/service/impl/AuthenticationServiceImpl.java +++ b/src/main/java/org/cardanofoundation/authentication/service/impl/AuthenticationServiceImpl.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.UUID; import java.util.concurrent.ThreadPoolExecutor; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; @@ -97,12 +98,12 @@ public SignInResponse signIn(SignInRequest signInRequest) { attributes.put(CommonConstant.ATTRIBUTE_LOGIN_TIME, List.of(String.valueOf(Instant.now()))); user.setAttributes(attributes); usersResource.get(user.getId()).update(user); - redisProvider.setValue(user.getId() + "_" + Instant.now(), response.getToken()); - redisProvider.setValue(user.getId() + "_" + Instant.now(), response.getRefreshToken()); + redisProvider.setValue(user.getId() + "_" + UUID.randomUUID(), response.getToken()); + redisProvider.setValue(user.getId() + "_" + UUID.randomUUID(), response.getRefreshToken()); List roles = jwtProvider.getRolesFromJwtToken(response.getToken()); roles.forEach(role -> { String roleId = keycloakProvider.getRoleIdByRoleName(role); - redisProvider.setValue(roleId + "_" + Instant.now(), user.getId()); + redisProvider.setValue(roleId + "_" + UUID.randomUUID(), user.getId()); }); return SignInResponse.builder().token(response.getToken()).address(signInRequest.getAddress()) .email(signInRequest.getEmail()).tokenType(CommonConstant.TOKEN_TYPE) diff --git a/src/main/java/org/cardanofoundation/authentication/service/impl/KeycloakServiceImpl.java b/src/main/java/org/cardanofoundation/authentication/service/impl/KeycloakServiceImpl.java index 24b6bfdf..2597e289 100644 --- a/src/main/java/org/cardanofoundation/authentication/service/impl/KeycloakServiceImpl.java +++ b/src/main/java/org/cardanofoundation/authentication/service/impl/KeycloakServiceImpl.java @@ -65,9 +65,11 @@ public Boolean roleMapping(EventModel model) { private void setInValidToken(Set keys) { keys.forEach(key -> { + log.info("key: " + key); String val = redisProvider.getValue(key); redisProvider.blacklistJwt(val, key); redisProvider.remove(key); + log.info("value success: " + val); }); } }