Skip to content

Commit a93cae0

Browse files
JwtToken validation skipped if not present for mobile request also Null condition Added for API (#75)
* Reverted Changes * removed Unused imports * Update application.properties * Swagger changes * Null Condition Added * AMM-1456 * Indent format
1 parent db0f144 commit a93cae0

File tree

2 files changed

+52
-39
lines changed

2 files changed

+52
-39
lines changed

src/main/java/com/iemr/tm/service/common/transaction/CommonNurseServiceImpl.java

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1894,24 +1894,26 @@ public BenMenstrualDetails getMenstrualHistory(Long beneficiaryRegID, Long visit
18941894
BenMenstrualDetails menstrualHistoryDetails = BenMenstrualDetails.getBenMenstrualDetails(menstrualHistory);
18951895

18961896
// CRs changes, 30-10-2018
1897-
String problemID = menstrualHistoryDetails.getMenstrualProblemID();
1898-
String problemName = menstrualHistoryDetails.getProblemName();
1899-
1900-
if (problemID != null && problemName != null) {
1901-
String[] problemIdArr = problemID.split(",");
1902-
String[] problemNameArr = problemName.split(",");
1903-
ArrayList<Map<String, Object>> menstrualProblemList = new ArrayList<>();
1904-
Map<String, Object> menstrualProblemMap = null;
1905-
1906-
if (problemIdArr.length == problemNameArr.length) {
1907-
for (int i = 0; i < problemIdArr.length; i++) {
1908-
menstrualProblemMap = new HashMap<String, Object>();
1909-
menstrualProblemMap.put("menstrualProblemID", problemIdArr[i]);
1910-
menstrualProblemMap.put("problemName", problemNameArr[i]);
1911-
menstrualProblemList.add(menstrualProblemMap);
1897+
if (null != menstrualHistoryDetails) {
1898+
String problemID = menstrualHistoryDetails.getMenstrualProblemID();
1899+
String problemName = menstrualHistoryDetails.getProblemName();
1900+
1901+
if (problemID != null && problemName != null) {
1902+
String[] problemIdArr = problemID.split(",");
1903+
String[] problemNameArr = problemName.split(",");
1904+
ArrayList<Map<String, Object>> menstrualProblemList = new ArrayList<>();
1905+
Map<String, Object> menstrualProblemMap = null;
1906+
1907+
if (problemIdArr.length == problemNameArr.length) {
1908+
for (int i = 0; i < problemIdArr.length; i++) {
1909+
menstrualProblemMap = new HashMap<String, Object>();
1910+
menstrualProblemMap.put("menstrualProblemID", problemIdArr[i]);
1911+
menstrualProblemMap.put("problemName", problemNameArr[i]);
1912+
menstrualProblemList.add(menstrualProblemMap);
1913+
}
19121914
}
1915+
menstrualHistoryDetails.setMenstrualProblemList(menstrualProblemList);
19131916
}
1914-
menstrualHistoryDetails.setMenstrualProblemList(menstrualProblemList);
19151917
}
19161918

19171919
return menstrualHistoryDetails;

src/main/java/com/iemr/tm/utils/JwtUserIdValidationFilter.java

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -48,49 +48,60 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo
4848
logger.info("No cookies found in the request");
4949
}
5050

51-
// Log headers for debugging
52-
String jwtTokenFromHeader = request.getHeader("Jwttoken");
53-
logger.info("JWT token from header: ");
54-
5551
// Skip login and public endpoints
5652
if (path.equals(contextPath + "/user/userAuthenticate")
5753
|| path.equalsIgnoreCase(contextPath + "/user/logOutUserFromConcurrentSession")
58-
|| path.startsWith(contextPath + "/swagger-ui")
59-
|| path.startsWith(contextPath + "/v3/api-docs")
60-
|| path.startsWith(contextPath + "/user/refreshToken")
61-
|| path.startsWith(contextPath + "/public")) {
54+
|| path.startsWith(contextPath + "/swagger-ui") || path.startsWith(contextPath + "/v3/api-docs")
55+
|| path.startsWith(contextPath + "/user/refreshToken") || path.startsWith(contextPath + "/public")) {
6256
logger.info("Skipping filter for path: " + path);
6357
filterChain.doFilter(servletRequest, servletResponse);
6458
return;
6559
}
6660

6761
try {
68-
// Retrieve JWT token from cookies
69-
String jwtTokenFromCookie = getJwtTokenFromCookies(request);
70-
logger.info("JWT token from cookie: ");
71-
72-
// Determine which token (cookie or header) to validate
73-
String jwtToken = jwtTokenFromCookie != null ? jwtTokenFromCookie : jwtTokenFromHeader;
74-
if (jwtToken == null) {
75-
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "JWT token not found in cookies or headers");
76-
return;
62+
String jwtFromCookie = getJwtTokenFromCookies(request);
63+
String jwtFromHeader = request.getHeader("JwtToken");
64+
String authHeader = request.getHeader("Authorization");
65+
66+
if (jwtFromCookie != null) {
67+
logger.info("Validating JWT token from cookie");
68+
if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromCookie)) {
69+
filterChain.doFilter(servletRequest, servletResponse);
70+
return;
71+
}
7772
}
7873

79-
// Validate JWT token and userId
80-
boolean isValid = jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtToken);
74+
if (jwtFromHeader != null) {
75+
logger.info("Validating JWT token from header");
76+
if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromHeader)) {
77+
filterChain.doFilter(servletRequest, servletResponse);
78+
return;
79+
}
80+
}
81+
String userAgent = request.getHeader("User-Agent");
82+
logger.info("User-Agent: " + userAgent);
8183

82-
if (isValid) {
83-
// If token is valid, allow the request to proceed
84+
if (userAgent != null && isMobileClient(userAgent) && authHeader != null) {
8485
filterChain.doFilter(servletRequest, servletResponse);
85-
} else {
86-
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid JWT token");
86+
return;
8787
}
88+
89+
logger.warn("No valid authentication token found");
90+
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized: Invalid or missing token");
91+
8892
} catch (Exception e) {
8993
logger.error("Authorization error: ", e);
9094
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: " + e.getMessage());
9195
}
9296
}
9397

98+
private boolean isMobileClient(String userAgent) {
99+
if (userAgent == null)
100+
return false;
101+
userAgent = userAgent.toLowerCase();
102+
return userAgent.contains("okhttp"); // iOS (custom clients)
103+
}
104+
94105
private String getJwtTokenFromCookies(HttpServletRequest request) {
95106
Cookie[] cookies = request.getCookies();
96107
if (cookies != null) {

0 commit comments

Comments
 (0)