|
|
@@ -2,29 +2,116 @@ package pl.sudra.securityController;
|
|
|
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Enumeration;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
public class CustomInterceptor implements HandlerInterceptor {
|
|
|
+ // endpoints
|
|
|
+ List<String> noAuth = List.of(
|
|
|
+ "/hello",
|
|
|
+ "/login",
|
|
|
+ "/register",
|
|
|
+ "/getAllBoats"
|
|
|
+ );
|
|
|
+ List<String> customer_and_above = List.of(
|
|
|
+ "/createReservation",
|
|
|
+ "/findReservations"
|
|
|
+ );
|
|
|
+ List<String> manager_and_above = Stream.concat(customer_and_above.stream(),
|
|
|
+ List.of(
|
|
|
+ "/addBoat"
|
|
|
+ ).stream())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<String> admin = Stream.concat(manager_and_above.stream(),
|
|
|
+ List.of(
|
|
|
+ "/generateReservations"
|
|
|
+ ).stream())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
- String token = request.getHeader("Authorization");
|
|
|
- System.out.println("pre");
|
|
|
- System.out.println(JwtTokenUtil.validateToken(token));
|
|
|
- return HandlerInterceptor.super.preHandle(request, response, handler);
|
|
|
+ if (Objects.equals(request.getMethod(), "OPTIONS")) {
|
|
|
+ response.setHeader("Access-Control-Allow-Origin", "*");
|
|
|
+ response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
|
|
+ response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
|
|
|
+ response.setHeader("Access-Control-Max-Age", "3600");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ System.out.println("test: " + request.getHeader("access-control-request-headers"));
|
|
|
+ System.out.println("test here: " + request.getHeader("access-control-request-headers.authorization"));
|
|
|
+
|
|
|
+ String endpoint = request.getRequestURI();
|
|
|
+// System.out.println(request.getHeaderNames().toString());
|
|
|
+ Enumeration<String> headerNames = request.getHeaderNames();
|
|
|
+ while (headerNames.hasMoreElements()) {
|
|
|
+ String headerName = headerNames.nextElement();
|
|
|
+ String headerValue = request.getHeader(headerName);
|
|
|
+ System.out.println(headerName + ": " + headerValue);
|
|
|
+ }
|
|
|
+ // if endpoint require no authorization
|
|
|
+ if (noAuth.contains(endpoint)) {
|
|
|
+ return HandlerInterceptor.super.preHandle(request, response, handler);
|
|
|
+ }
|
|
|
+ // authorization required
|
|
|
+ else {
|
|
|
+ try {
|
|
|
+ String token = request.getHeader("Authorization").split(" ")[1];
|
|
|
+
|
|
|
+ // is Token valid and not expired?
|
|
|
+ if (JwtTokenUtil.validateToken(token)) {
|
|
|
+ if (customer_and_above.contains(endpoint) &&
|
|
|
+ Objects.equals(JwtTokenUtil.getRoleFromToken(token), "CLIENT")) {
|
|
|
+ System.out.println("customer_and_above");
|
|
|
+ return HandlerInterceptor.super.preHandle(request, response, handler);
|
|
|
+ } else if (manager_and_above.contains(endpoint) &&
|
|
|
+ Objects.equals(JwtTokenUtil.getRoleFromToken(token), "MANAGER")) {
|
|
|
+ return HandlerInterceptor.super.preHandle(request, response, handler);
|
|
|
+ } else if (admin.contains(endpoint) &&
|
|
|
+ Objects.equals(JwtTokenUtil.getRoleFromToken(token), "ADMIN")) {
|
|
|
+ return HandlerInterceptor.super.preHandle(request, response, handler);
|
|
|
+ } else {
|
|
|
+ response.setStatus(HttpStatus.FORBIDDEN.value());
|
|
|
+ response.getWriter().write("Unauthorized access");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // token not valid
|
|
|
+ else {
|
|
|
+ response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
|
|
+ response.getWriter().write("Invalid token");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (NullPointerException e) {
|
|
|
+ System.out.println(e);
|
|
|
+ response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
|
|
+ response.getWriter().write("Empty header");
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println(e);
|
|
|
+ response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
|
|
+ response.getWriter().write("Missing authorization header");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
|
|
- System.out.println("post");
|
|
|
- System.out.println(request);
|
|
|
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
|
|
- System.out.println("after");
|
|
|
- System.out.println(request);
|
|
|
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
|
|
|
}
|
|
|
}
|