Skip to content

Commit 2b4bdd3

Browse files
indraniBanIN40068837
andauthored
jwt api implementation (#56)
* jwt api implementation * formatted the classes and dependency version upgraded * corrected by coderabbit comments * modified whatever commented fixed those * fixed prop * user fetch from redis concept * user fetch concept modify --------- Co-authored-by: IN40068837 <[email protected]>
1 parent 2f0b214 commit 2b4bdd3

File tree

14 files changed

+463
-96
lines changed

14 files changed

+463
-96
lines changed

pom.xml

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,17 @@
5151

5252

5353
<dependencies>
54-
<!--
55-
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
54+
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
5655
<dependency>
5756
<groupId>org.springframework.boot</groupId>
5857
<artifactId>spring-boot-starter-aop</artifactId>
5958
</dependency>
60-
<dependency>
61-
<groupId>co.elastic.logging</groupId>
62-
<artifactId>logback-ecs-encoder</artifactId>
63-
<version>1.3.2</version>
59+
<dependency>
60+
<groupId>co.elastic.logging</groupId>
61+
<artifactId>logback-ecs-encoder</artifactId>
62+
<version>1.3.2</version>
6463
</dependency>
65-
64+
6665
<dependency>
6766
<groupId>org.slf4j</groupId>
6867
<artifactId>slf4j-api</artifactId>
@@ -141,7 +140,7 @@
141140
<artifactId>spring-boot-starter-test</artifactId>
142141
<scope>test</scope>
143142
</dependency>
144-
143+
145144
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
146145
<dependency>
147146
<groupId>com.google.guava</groupId>
@@ -163,7 +162,7 @@
163162
<artifactId>json</artifactId>
164163
<version>20231013</version>
165164
</dependency>
166-
165+
167166
<dependency>
168167
<groupId>jakarta.servlet</groupId>
169168
<artifactId>jakarta.servlet-api</artifactId>
@@ -193,8 +192,7 @@
193192
</exclusion>
194193
</exclusions>
195194
</dependency>
196-
<!--
197-
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
195+
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
198196
<dependency>
199197
<groupId>org.springframework.boot</groupId>
200198
<artifactId>spring-boot-starter-data-redis</artifactId>
@@ -239,8 +237,7 @@
239237
</exclusion>
240238
</exclusions>
241239
</dependency>
242-
<!--
243-
https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
240+
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
244241
<dependency>
245242
<groupId>org.springframework.session</groupId>
246243
<artifactId>spring-session-data-redis</artifactId>
@@ -266,8 +263,7 @@
266263
<artifactId>jackson-datatype-joda</artifactId>
267264
<version>2.17.0</version>
268265
</dependency>
269-
<!--
270-
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
266+
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
271267
<dependency>
272268
<groupId>com.fasterxml.jackson.core</groupId>
273269
<artifactId>jackson-databind</artifactId>
@@ -279,8 +275,28 @@
279275
<artifactId>jackson-core</artifactId>
280276
<version>2.17.0-rc1</version>
281277
</dependency>
278+
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api -->
279+
<dependency>
280+
<groupId>io.jsonwebtoken</groupId>
281+
<artifactId>jjwt-api</artifactId>
282+
<version>0.12.6</version>
283+
</dependency>
284+
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-impl -->
285+
<dependency>
286+
<groupId>io.jsonwebtoken</groupId>
287+
<artifactId>jjwt-impl</artifactId>
288+
<version>0.12.6</version>
289+
<scope>runtime</scope>
290+
</dependency>
291+
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-jackson -->
292+
<dependency>
293+
<groupId>io.jsonwebtoken</groupId>
294+
<artifactId>jjwt-jackson</artifactId>
295+
<version>0.12.6</version>
296+
<scope>runtime</scope>
297+
</dependency>
282298
</dependencies>
283-
299+
284300

285301

286302
<build>
@@ -371,8 +387,7 @@
371387
${target-properties} and
372388
${source-properties}
373389
</echo>
374-
<concat destfile="${target-properties}"
375-
append="yes"
390+
<concat destfile="${target-properties}" append="yes"
376391
force="yes">
377392
<fileset file="${source-properties}">
378393
</fileset>

src/main/environment/common_ci.properties

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ tcSpeclistWL=7
6767

6868
### Redis IP
6969
spring.redis.host=localhost
70+
jwt.secret=@env.JWT_SECRET_KEY@
71+
7072

7173
#ELK logging file name
72-
logging.file.name=@env.TM_API_LOGGING_FILE_NAME@
74+
logging.file.name=@env.TM_API_LOGGING_FILE_NAME@
75+

src/main/environment/common_dev.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,5 @@ tcSpeclistWL=7
6666
prescription=TMPrescription SMS
6767
### Redis IP
6868
spring.redis.host=localhost
69+
jwt.secret=
6970

src/main/environment/common_test.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ prescription=TMPrescription SMS
6969

7070
### Redis IP
7171
spring.redis.host=localhost
72+
jwt.secret=
7273

7374

7475

src/main/environment/common_uat.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,6 @@ tcSpeclistWL=7
6868
prescription=TMPrescription SMS
6969
### Redis IP
7070
spring.redis.host=localhost
71+
jwt.secret=
7172

7273

src/main/java/com/iemr/tm/Application.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,13 @@
2525
import org.springframework.boot.autoconfigure.SpringBootApplication;
2626
import org.springframework.context.annotation.Bean;
2727
import org.springframework.context.annotation.ComponentScan;
28+
import org.springframework.data.redis.connection.RedisConnectionFactory;
29+
import org.springframework.data.redis.core.RedisTemplate;
30+
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
31+
import org.springframework.data.redis.serializer.StringRedisSerializer;
2832
import org.springframework.web.client.RestTemplate;
2933

34+
import com.iemr.tm.data.login.Users;
3035
import com.iemr.tm.utils.IEMRApplBeans;
3136

3237
@SpringBootApplication
@@ -45,5 +50,20 @@ public IEMRApplBeans instantiateBeans() {
4550
public RestTemplate getRestTemplate() {
4651
return new RestTemplate();
4752
}
53+
54+
@Bean
55+
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
56+
RedisTemplate<String, Object> template = new RedisTemplate<>();
57+
template.setConnectionFactory(factory);
58+
59+
// Use StringRedisSerializer for keys (userId)
60+
template.setKeySerializer(new StringRedisSerializer());
61+
62+
// Use Jackson2JsonRedisSerializer for values (Users objects)
63+
Jackson2JsonRedisSerializer<Users> serializer = new Jackson2JsonRedisSerializer<>(Users.class);
64+
template.setValueSerializer(serializer);
65+
66+
return template;
67+
}
4868

4969
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.iemr.tm.config;
2+
3+
import org.springframework.cache.annotation.EnableCaching;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.data.redis.connection.RedisConnectionFactory;
7+
import org.springframework.data.redis.core.RedisTemplate;
8+
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
9+
import org.springframework.data.redis.serializer.StringRedisSerializer;
10+
import org.springframework.session.data.redis.config.ConfigureRedisAction;
11+
12+
import com.iemr.tm.data.login.Users;
13+
14+
@Configuration
15+
@EnableCaching
16+
public class RedisConfig {
17+
18+
@Bean
19+
public ConfigureRedisAction configureRedisAction() {
20+
return ConfigureRedisAction.NO_OP;
21+
}
22+
23+
@Bean
24+
public RedisTemplate<String, Users> redisTemplate(RedisConnectionFactory factory) {
25+
RedisTemplate<String, Users> template = new RedisTemplate<>();
26+
template.setConnectionFactory(factory);
27+
28+
// Use StringRedisSerializer for keys (userId)
29+
template.setKeySerializer(new StringRedisSerializer());
30+
31+
// Use Jackson2JsonRedisSerializer for values (Users objects)
32+
Jackson2JsonRedisSerializer<Users> serializer = new Jackson2JsonRedisSerializer<>(Users.class);
33+
template.setValueSerializer(serializer);
34+
35+
return template;
36+
}
37+
38+
}

src/main/java/com/iemr/tm/data/login/Users.java

Lines changed: 9 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -21,98 +21,30 @@
2121
*/
2222
package com.iemr.tm.data.login;
2323

24-
import java.sql.Timestamp;
24+
import java.io.Serializable;
25+
26+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2527

2628
import jakarta.persistence.Column;
2729
import jakarta.persistence.Entity;
2830
import jakarta.persistence.GeneratedValue;
2931
import jakarta.persistence.GenerationType;
3032
import jakarta.persistence.Id;
3133
import jakarta.persistence.Table;
32-
33-
import com.google.gson.annotations.Expose;
34+
import lombok.Data;
3435

3536
@Entity
37+
@Data
3638
@Table(name = "m_user")
37-
public class Users {
39+
@JsonIgnoreProperties(ignoreUnknown = true)
40+
public class Users implements Serializable {
3841
@Id
3942
@GeneratedValue(strategy = GenerationType.IDENTITY)
40-
@Expose
4143
@Column(name = "UserID")
4244
private Long userID;
43-
@Expose
44-
@Column(name = "TitleID") private Short titleID;
45-
@Expose
46-
@Column(name = "FirstName")
47-
private String firstName;
48-
@Expose
49-
@Column(name = "MiddleName")
50-
private String middleName;
51-
@Expose
52-
@Column(name = "lastName")
53-
private String lastName;
54-
@Expose
55-
@Column(name = "GenderID")
56-
private Short genderID;
57-
@Expose
58-
@Column(name = "MaritalStatusID")
59-
private Short maritalStatusID;
60-
@Expose
61-
@Column(name = "AadhaarNo")
62-
private String aadhaarNo;
63-
@Expose
64-
@Column(name = "PAN")
65-
private String pan;
66-
@Expose
67-
@Column(name = "DOB")
68-
private Timestamp dob;
69-
@Expose
70-
@Column(name = "DOJ")
71-
private Timestamp doj;
72-
@Expose
73-
@Column(name = "QualificationID")
74-
private Integer qualificationID;
75-
@Expose
7645
@Column(name = "UserName")
7746
private String userName;
78-
@Expose
79-
@Column(name = "Password")
80-
private String password;
81-
@Expose
82-
@Column(name = "AgentID")
83-
private String agentID;
84-
@Expose
85-
@Column(name = "AgentPassword")
86-
private String agentPassword;
87-
@Expose
88-
@Column(name = "EmailID")
89-
private String emailID;
90-
@Expose
91-
@Column(name = "StatusID")
92-
private Short statusID;
93-
@Expose
94-
@Column(name = "EmergencyContactPerson")
95-
private String emergencyContactPerson;
96-
@Expose
97-
@Column(name = "EmergencyContactNo")
98-
private String emergencyContactNo;
99-
@Expose
100-
@Column(name = "IsSupervisor")
101-
private Boolean isSupervisor;
102-
@Expose
103-
@Column(name = "Deleted")
104-
private Boolean deleted;
105-
@Expose
106-
@Column(name = "CreatedBy")
107-
private String createdBy;
108-
@Expose
109-
@Column(name = "CreatedDate")
110-
private Timestamp createdDate;
111-
@Expose
112-
@Column(name = "ModifiedBy")
113-
private String modifiedBy;
114-
@Expose
115-
@Column(name = "LastModDate")
116-
private Timestamp lastModDate;
47+
@Column(name = "Deleted", insertable = false, updatable = false)
48+
private Boolean Deleted;
11749

11850
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.iemr.tm.repo.login;
2+
3+
import org.springframework.data.jpa.repository.Query;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.data.repository.query.Param;
6+
import org.springframework.stereotype.Repository;
7+
8+
import com.iemr.tm.data.login.Users;
9+
10+
@Repository
11+
public interface UserLoginRepo extends CrudRepository<Users, Long> {
12+
13+
@Query(" SELECT u FROM Users u WHERE u.userID = :userID AND u.Deleted = false ")
14+
public Users getUserByUserID(@Param("userID") Long userID);
15+
16+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.iemr.tm.utils;
2+
3+
import java.util.Arrays;
4+
import java.util.Optional;
5+
6+
import org.springframework.stereotype.Service;
7+
8+
import jakarta.servlet.http.Cookie;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import jakarta.servlet.http.HttpServletResponse;
11+
12+
@Service
13+
public class CookieUtil {
14+
15+
public Optional<String> getCookieValue(HttpServletRequest request, String cookieName) {
16+
Cookie[] cookies = request.getCookies();
17+
if (cookies != null) {
18+
for (Cookie cookie : cookies) {
19+
if (cookieName.equals(cookie.getName())) {
20+
return Optional.of(cookie.getValue());
21+
}
22+
}
23+
}
24+
return Optional.empty();
25+
}
26+
27+
public String getJwtTokenFromCookie(HttpServletRequest request) {
28+
return Arrays.stream(request.getCookies()).filter(cookie -> "Jwttoken".equals(cookie.getName()))
29+
.map(Cookie::getValue).findFirst().orElse(null);
30+
}
31+
}

0 commit comments

Comments
 (0)