Skip to content

Commit

Permalink
user fetch from redis concept
Browse files Browse the repository at this point in the history
  • Loading branch information
IN40068837 authored and IN40068837 committed Dec 19, 2024
1 parent 7f8ed48 commit 169c3a4
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 18 deletions.
20 changes: 20 additions & 0 deletions src/main/java/com/iemr/tm/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -45,5 +50,20 @@ public IEMRApplBeans instantiateBeans() {
public RestTemplate getRestTemplate() {
return new RestTemplate();
}

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);

// Use StringRedisSerializer for keys (userId)
template.setKeySerializer(new StringRedisSerializer());

// Use Jackson2JsonRedisSerializer for values (Users objects)
Jackson2JsonRedisSerializer<Users> serializer = new Jackson2JsonRedisSerializer<>(Users.class);
template.setValueSerializer(serializer);

return template;
}

}
38 changes: 38 additions & 0 deletions src/main/java/com/iemr/tm/config/RedisConfig.java
Original file line number Diff line number Diff line change
@@ -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<String, Users> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Users> template = new RedisTemplate<>();
template.setConnectionFactory(factory);

// Use StringRedisSerializer for keys (userId)
template.setKeySerializer(new StringRedisSerializer());

// Use Jackson2JsonRedisSerializer for values (Users objects)
Jackson2JsonRedisSerializer<Users> serializer = new Jackson2JsonRedisSerializer<>(Users.class);
template.setValueSerializer(serializer);

return template;
}

}
7 changes: 6 additions & 1 deletion src/main/java/com/iemr/tm/data/login/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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")
Expand Down
13 changes: 0 additions & 13 deletions src/main/java/com/iemr/tm/repo/user/UserLoginRepo.java

This file was deleted.

23 changes: 19 additions & 4 deletions src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -24,7 +25,7 @@ public class JwtAuthenticationUtil {
@Autowired
private JwtUtil jwtUtil;
@Autowired
private UserLoginRepo userLoginRepo;
private RedisTemplate<String, Object> redisTemplate;
private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());

public JwtAuthenticationUtil(CookieUtil cookieUtil, JwtUtil jwtUtil) {
Expand Down Expand Up @@ -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.");
}
Expand All @@ -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
}

}

0 comments on commit 169c3a4

Please sign in to comment.