Skip to content

Commit bb50220

Browse files
authored
Merge pull request #9 from Hashara/jwtauth
Jwtauth
2 parents e37fcfd + 972f64e commit bb50220

21 files changed

+358
-116
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@
5959
<artifactId>jbcrypt</artifactId>
6060
<version>0.4</version>
6161
</dependency>
62+
<dependency>
63+
<groupId>io.jsonwebtoken</groupId>
64+
<artifactId>jjwt</artifactId>
65+
<version>0.9.1</version>
66+
</dependency>
67+
6268
</dependencies>
6369

6470
</project>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.sparkx.Exception;
2+
3+
public class UnauthorizedException extends Exception {
4+
public UnauthorizedException(String message) {
5+
super(message);
6+
}
7+
}

src/main/java/com/sparkx/Filter/AuthFilterHelper.java

Lines changed: 0 additions & 37 deletions
This file was deleted.

src/main/java/com/sparkx/Filter/AuthServletFilter.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/main/java/com/sparkx/Filter/DirectorFilter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
2323
HttpServletRequest req = (HttpServletRequest) request;
2424
HttpServletResponse res = (HttpServletResponse) response;
2525

26-
Person person = (Person) req.getAttribute("user");
27-
if (person.getRole() == RoleType.Director) {
26+
if (req.getAttribute("role").equals(RoleType.Director.toString())) {
2827
filterChain.doFilter(req, res);
2928
} else {
3029
new Controller().sendMessageResponse(Message.FORBIDDEN, res, HttpServletResponse.SC_FORBIDDEN);

src/main/java/com/sparkx/Filter/DoctorFilter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
2525
HttpServletRequest req = (HttpServletRequest) request;
2626
HttpServletResponse res = (HttpServletResponse) response;
2727

28-
Person person = (Person) req.getAttribute("user");
29-
if (person.getRole() == RoleType.Doctor || person.getRole() == RoleType.Director) {
28+
if (req.getAttribute("role").equals(RoleType.Doctor.toString()) || req.getAttribute("role").equals(RoleType.Director.toString())) {
3029
filterChain.doFilter(req, res);
3130
} else {
3231
new Controller().sendMessageResponse(Message.FORBIDDEN, res, HttpServletResponse.SC_FORBIDDEN);
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.sparkx.Filter;
2+
3+
import com.sparkx.service.AuthService;
4+
import io.jsonwebtoken.Claims;
5+
import org.apache.log4j.Logger;
6+
7+
import javax.servlet.*;
8+
import javax.servlet.annotation.WebFilter;
9+
import javax.servlet.http.HttpServletRequest;
10+
import javax.servlet.http.HttpServletResponse;
11+
import java.io.IOException;
12+
13+
@WebFilter(filterName = "JWTFilter")
14+
public class JwtAuthFilter implements Filter {
15+
private static final Logger logger = Logger.getLogger(JwtAuthFilter.class.getName());
16+
17+
private static final String AUTH_HEADER_KEY = "Authorization";
18+
private static final String AUTH_HEADER_VALUE_PREFIX = "Bearer "; // with trailing space to separate token
19+
20+
private static final int STATUS_CODE_UNAUTHORIZED = 401;
21+
private AuthService authService;
22+
23+
24+
@Override
25+
public void init(FilterConfig filterConfig) throws ServletException {
26+
authService = new AuthService();
27+
}
28+
29+
@Override
30+
public void doFilter(final ServletRequest servletRequest,
31+
final ServletResponse servletResponse,
32+
final FilterChain filterChain) throws IOException, ServletException {
33+
HttpServletRequest req = (HttpServletRequest) servletRequest;
34+
HttpServletResponse res = (HttpServletResponse) servletResponse;
35+
36+
try {
37+
38+
String jwt = getBearerToken(req);
39+
40+
if (jwt != null && !jwt.isEmpty()) {
41+
42+
Claims claims = AuthService.decodeJWT(jwt);
43+
req.setAttribute("role", claims.get("role"));
44+
req.setAttribute("hospitalId", claims.get("hospitalId"));
45+
req.setAttribute("userId", claims.getId());
46+
filterChain.doFilter(req, res);
47+
logger.info("Logged in using JWT");
48+
} else {
49+
logger.info("Failed logging in with security token");
50+
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
51+
httpResponse.setContentLength(0);
52+
httpResponse.setStatus(STATUS_CODE_UNAUTHORIZED);
53+
}
54+
55+
} catch (final Exception e) {
56+
logger.info("Failed logging in with security token", e);
57+
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
58+
httpResponse.setContentLength(0);
59+
httpResponse.setStatus(STATUS_CODE_UNAUTHORIZED);
60+
}
61+
}
62+
63+
@Override
64+
public void destroy() {
65+
logger.info("JwtAuthenticationFilter destroyed");
66+
}
67+
68+
private String getBearerToken(HttpServletRequest request) {
69+
String authHeader = request.getHeader(AUTH_HEADER_KEY);
70+
if (authHeader != null && authHeader.startsWith(AUTH_HEADER_VALUE_PREFIX)) {
71+
return authHeader.substring(AUTH_HEADER_VALUE_PREFIX.length());
72+
}
73+
return null;
74+
}
75+
}

src/main/java/com/sparkx/Filter/MoHFilter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
2323
HttpServletRequest req = (HttpServletRequest) request;
2424
HttpServletResponse res = (HttpServletResponse) response;
2525

26-
Person person = (Person) req.getAttribute("user");
27-
if (person.getRole() == RoleType.MoH) {
26+
if (req.getAttribute("role").equals(RoleType.MoH.toString())) {
2827
filterChain.doFilter(req, res);
2928
} else {
3029
new Controller().sendMessageResponse(Message.FORBIDDEN, res, HttpServletResponse.SC_FORBIDDEN);

src/main/java/com/sparkx/Filter/PatientFilter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
2424
HttpServletResponse res = (HttpServletResponse) response;
2525

2626
Person person = (Person) req.getAttribute("user");
27-
if (person.getRole() == RoleType.Patient || person.getRole() == RoleType.Doctor
28-
|| person.getRole() == RoleType.Director
29-
|| person.getRole() == RoleType.HospitalStaff) {
27+
if (req.getAttribute("role").equals(RoleType.Patient.toString())
28+
|| req.getAttribute("role").equals(RoleType.Doctor.toString())
29+
|| req.getAttribute("role").equals(RoleType.Director.toString())
30+
|| req.getAttribute("role").equals(RoleType.HospitalStaff.toString())) {
3031
filterChain.doFilter(req, res);
3132
} else {
3233
new Controller().sendMessageResponse(Message.FORBIDDEN, res, HttpServletResponse.SC_FORBIDDEN);

src/main/java/com/sparkx/Filter/StaffFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
2424
HttpServletResponse res = (HttpServletResponse) response;
2525

2626
Person person = (Person) req.getAttribute("user");
27-
if (person.getRole() == RoleType.Doctor || person.getRole() == RoleType.Director
28-
|| person.getRole() == RoleType.HospitalStaff) {
27+
if (req.getAttribute("role").equals(RoleType.Doctor.toString())
28+
|| req.getAttribute("role").equals(RoleType.Director.toString())
29+
|| req.getAttribute("role").equals(RoleType.HospitalStaff.toString())) {
2930
filterChain.doFilter(req, res);
3031
} else {
3132
new Controller().sendMessageResponse(Message.FORBIDDEN, res, HttpServletResponse.SC_FORBIDDEN);

0 commit comments

Comments
 (0)