diff --git a/src/main/java/com/example/farmusgateway/filter/JwtAuthenticationGatewayFilterFactory.java b/src/main/java/com/example/farmusgateway/filter/JwtAuthenticationGatewayFilterFactory.java index fcb91a5..7b18cef 100644 --- a/src/main/java/com/example/farmusgateway/filter/JwtAuthenticationGatewayFilterFactory.java +++ b/src/main/java/com/example/farmusgateway/filter/JwtAuthenticationGatewayFilterFactory.java @@ -1,6 +1,8 @@ package com.example.farmusgateway.filter; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; @@ -21,6 +23,8 @@ import reactor.core.publisher.Mono; import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; @Component @Slf4j @@ -132,19 +136,31 @@ public String decode(String token) { } // Mono, Flux -> Spring WebFlux + private Mono onError(ServerWebExchange exchange, String error, HttpStatus httpStatus) { ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(httpStatus); response.getHeaders().setContentType(MediaType.APPLICATION_JSON); - String errorMessage = "{\"error\": \"" + error + "\"}"; - DataBuffer buffer = response.bufferFactory().wrap(errorMessage.getBytes(StandardCharsets.UTF_8)); + Map errorResponse = new HashMap<>(); + errorResponse.put("error", error); + + ObjectMapper objectMapper = new ObjectMapper(); + byte[] errorResponseBytes; + try { + errorResponseBytes = objectMapper.writeValueAsBytes(errorResponse); + } catch (JsonProcessingException e) { + errorResponseBytes = "{\"error\": \"Internal Server Error\"}".getBytes(StandardCharsets.UTF_8); + } + + DataBuffer buffer = response.bufferFactory().wrap(errorResponseBytes); log.error(error); return response.writeWith(Mono.just(buffer)).then(response.setComplete()); } + @Data public static class Config {