Skip to content

Commit

Permalink
fix: Handle log out when edit user role in keycloak
Browse files Browse the repository at this point in the history
  • Loading branch information
Sotatek-PhucNguyen5 committed Oct 9, 2023
1 parent bee07a2 commit 2d06e64
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 5 deletions.
Expand Up @@ -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;

Expand Down Expand Up @@ -121,7 +122,7 @@ LettuceConnectionFactory lettuceConnectionFactory(RedisSentinelConfiguration sen
var redisTemplate = new RedisTemplate<String, Object>();
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;
Expand Down
Expand Up @@ -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));
}

/*
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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<String> 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)
Expand Down
Expand Up @@ -65,9 +65,11 @@ public Boolean roleMapping(EventModel model) {

private void setInValidToken(Set<String> 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);
});
}
}

0 comments on commit 2d06e64

Please sign in to comment.