From 169c3a470321db4c8ab1f894e2e6e3659bddb2c8 Mon Sep 17 00:00:00 2001 From: IN40068837 Date: Thu, 19 Dec 2024 13:58:53 +0530 Subject: [PATCH] user fetch from redis concept --- src/main/java/com/iemr/tm/Application.java | 20 ++++++++++ .../java/com/iemr/tm/config/RedisConfig.java | 38 +++++++++++++++++++ .../java/com/iemr/tm/data/login/Users.java | 7 +++- .../com/iemr/tm/repo/user/UserLoginRepo.java | 13 ------- .../iemr/tm/utils/JwtAuthenticationUtil.java | 23 +++++++++-- 5 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/iemr/tm/config/RedisConfig.java delete mode 100644 src/main/java/com/iemr/tm/repo/user/UserLoginRepo.java diff --git a/src/main/java/com/iemr/tm/Application.java b/src/main/java/com/iemr/tm/Application.java index 5b1ecd65..97f380b2 100644 --- a/src/main/java/com/iemr/tm/Application.java +++ b/src/main/java/com/iemr/tm/Application.java @@ -25,8 +25,13 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.web.client.RestTemplate; +import com.iemr.tm.data.login.Users; import com.iemr.tm.utils.IEMRApplBeans; @SpringBootApplication @@ -45,5 +50,20 @@ public IEMRApplBeans instantiateBeans() { public RestTemplate getRestTemplate() { return new RestTemplate(); } + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + + // Use StringRedisSerializer for keys (userId) + template.setKeySerializer(new StringRedisSerializer()); + + // Use Jackson2JsonRedisSerializer for values (Users objects) + Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Users.class); + template.setValueSerializer(serializer); + + return template; + } } diff --git a/src/main/java/com/iemr/tm/config/RedisConfig.java b/src/main/java/com/iemr/tm/config/RedisConfig.java new file mode 100644 index 00000000..7c75fb52 --- /dev/null +++ b/src/main/java/com/iemr/tm/config/RedisConfig.java @@ -0,0 +1,38 @@ +package com.iemr.tm.config; + +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.session.data.redis.config.ConfigureRedisAction; + +import com.iemr.tm.data.login.Users; + +@Configuration +@EnableCaching +public class RedisConfig { + + @Bean + public ConfigureRedisAction configureRedisAction() { + return ConfigureRedisAction.NO_OP; + } + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + + // Use StringRedisSerializer for keys (userId) + template.setKeySerializer(new StringRedisSerializer()); + + // Use Jackson2JsonRedisSerializer for values (Users objects) + Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Users.class); + template.setValueSerializer(serializer); + + return template; + } + +} diff --git a/src/main/java/com/iemr/tm/data/login/Users.java b/src/main/java/com/iemr/tm/data/login/Users.java index 5e7b8b82..2626d44e 100644 --- a/src/main/java/com/iemr/tm/data/login/Users.java +++ b/src/main/java/com/iemr/tm/data/login/Users.java @@ -21,6 +21,10 @@ */ package com.iemr.tm.data.login; +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -32,7 +36,8 @@ @Entity @Data @Table(name = "m_user") -public class Users { +@JsonIgnoreProperties(ignoreUnknown = true) +public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "UserID") diff --git a/src/main/java/com/iemr/tm/repo/user/UserLoginRepo.java b/src/main/java/com/iemr/tm/repo/user/UserLoginRepo.java deleted file mode 100644 index b01e4af2..00000000 --- a/src/main/java/com/iemr/tm/repo/user/UserLoginRepo.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.iemr.tm.repo.user; - -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -import com.iemr.tm.data.login.Users; - -@Repository -public interface UserLoginRepo extends CrudRepository { - - Users findByUserID(Long userID); - -} diff --git a/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java b/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java index a33b39f0..cd0f7f56 100644 --- a/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java +++ b/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java @@ -1,16 +1,17 @@ package com.iemr.tm.utils; import java.util.Optional; +import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import com.iemr.tm.data.login.Users; -import com.iemr.tm.repo.user.UserLoginRepo; import com.iemr.tm.utils.exception.IEMRException; import io.jsonwebtoken.Claims; @@ -24,7 +25,7 @@ public class JwtAuthenticationUtil { @Autowired private JwtUtil jwtUtil; @Autowired - private UserLoginRepo userLoginRepo; + private RedisTemplate redisTemplate; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); public JwtAuthenticationUtil(CookieUtil cookieUtil, JwtUtil jwtUtil) { @@ -70,8 +71,8 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { String userId = claims.get("userId", String.class); - // Fetch user based on userId from the database or cache - Users user = userLoginRepo.findByUserID(Long.parseLong(userId)); + // Check if user data is present in Redis + Users user = getUserFromCache(userId); if (user == null) { throw new IEMRException("Invalid User ID."); } @@ -82,4 +83,18 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { throw new IEMRException("Validation error: " + e.getMessage(), e); } } + + private Users getUserFromCache(String userId) { + String redisKey = "user_" + userId; // The Redis key format + Users user = (Users) redisTemplate.opsForValue().get(redisKey); + + if (user == null) { + logger.warn("User not found in Redis."); + } else { + logger.info("User fetched successfully from Redis."); + } + + return user; // Returns null if not found + } + }