From 7f3e2ee62c95fb438cac2c8543e5d4a13e332514 Mon Sep 17 00:00:00 2001 From: seungyeonnnnnni Date: Sat, 11 Nov 2023 00:45:37 +0900 Subject: [PATCH] =?UTF-8?q?fix=20:=20cors=20=EC=84=A4=EC=A0=95=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20gateway=20uri=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PassCorsRoutePredicateHandlerMapping.java | 90 +++++++-------- .../server/global/config/WebFluxConfig.java | 3 +- .../exception/GlobalExceptionHandler.java | 13 ++- .../filter/AuthorizationHeaderFilter.java | 4 +- .../global/filter/CorsConfiguration.java | 104 +++++++++--------- .../server/global/jwt/JwtTokenProvider.java | 5 + 6 files changed, 113 insertions(+), 106 deletions(-) diff --git a/src/main/java/gwangjang/server/global/config/PassCorsRoutePredicateHandlerMapping.java b/src/main/java/gwangjang/server/global/config/PassCorsRoutePredicateHandlerMapping.java index f5a19c2..3e4963d 100644 --- a/src/main/java/gwangjang/server/global/config/PassCorsRoutePredicateHandlerMapping.java +++ b/src/main/java/gwangjang/server/global/config/PassCorsRoutePredicateHandlerMapping.java @@ -1,45 +1,45 @@ -package gwangjang.server.global.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.gateway.config.GlobalCorsProperties; -import org.springframework.cloud.gateway.handler.FilteringWebHandler; -import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping; -import org.springframework.cloud.gateway.route.RouteLocator; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Primary; -import org.springframework.core.env.Environment; -import org.springframework.web.server.ServerWebExchange; -import reactor.core.publisher.Mono; - -public class PassCorsRoutePredicateHandlerMapping extends RoutePredicateHandlerMapping { - - private static final Logger logger = LoggerFactory.getLogger(PassCorsRoutePredicateHandlerMapping.class); - - public PassCorsRoutePredicateHandlerMapping(FilteringWebHandler webHandler, RouteLocator routeLocator, - GlobalCorsProperties globalCorsProperties, Environment environment) { - super(webHandler, routeLocator, globalCorsProperties, environment); - } - - @Override - public Mono getHandler(ServerWebExchange exchange) { - logger.info("[PassCorsRoutePredicateHandlerMapping] getHandler"); - return getHandlerInternal(exchange).map(handler -> { - logger.info(exchange.getLogPrefix() + "Mapped to " + handler); - - // CORS 체크 로직 제거 - - - return handler; - }); - } - - @Bean - @Primary - public RoutePredicateHandlerMapping passCorsRoutePredicateHandlerMapping( - FilteringWebHandler webHandler, RouteLocator routeLocator, - GlobalCorsProperties globalCorsProperties, Environment environment) { - return new PassCorsRoutePredicateHandlerMapping(webHandler, routeLocator, - globalCorsProperties, environment); - } -} +//package gwangjang.server.global.config; +// +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.cloud.gateway.config.GlobalCorsProperties; +//import org.springframework.cloud.gateway.handler.FilteringWebHandler; +//import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping; +//import org.springframework.cloud.gateway.route.RouteLocator; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Primary; +//import org.springframework.core.env.Environment; +//import org.springframework.web.server.ServerWebExchange; +//import reactor.core.publisher.Mono; +// +//public class PassCorsRoutePredicateHandlerMapping extends RoutePredicateHandlerMapping { +// +// private static final Logger logger = LoggerFactory.getLogger(PassCorsRoutePredicateHandlerMapping.class); +// +// public PassCorsRoutePredicateHandlerMapping(FilteringWebHandler webHandler, RouteLocator routeLocator, +// GlobalCorsProperties globalCorsProperties, Environment environment) { +// super(webHandler, routeLocator, globalCorsProperties, environment); +// } +// +// @Override +// public Mono getHandler(ServerWebExchange exchange) { +// logger.info("[PassCorsRoutePredicateHandlerMapping] getHandler"); +// return getHandlerInternal(exchange).map(handler -> { +// logger.info(exchange.getLogPrefix() + "Mapped to " + handler); +// +// // CORS 체크 로직 제거 +// +// +// return handler; +// }); +// } +// +// @Bean +// @Primary +// public RoutePredicateHandlerMapping passCorsRoutePredicateHandlerMapping( +// FilteringWebHandler webHandler, RouteLocator routeLocator, +// GlobalCorsProperties globalCorsProperties, Environment environment) { +// return new PassCorsRoutePredicateHandlerMapping(webHandler, routeLocator, +// globalCorsProperties, environment); +// } +//} diff --git a/src/main/java/gwangjang/server/global/config/WebFluxConfig.java b/src/main/java/gwangjang/server/global/config/WebFluxConfig.java index 47770da..27e8790 100644 --- a/src/main/java/gwangjang/server/global/config/WebFluxConfig.java +++ b/src/main/java/gwangjang/server/global/config/WebFluxConfig.java @@ -6,6 +6,7 @@ //import org.springframework.web.reactive.config.EnableWebFlux; //import org.springframework.web.reactive.config.WebFluxConfigurer; //import org.springframework.web.reactive.config.WebFluxConfigurerComposite; +// //@EnableWebFlux //@Configuration //public class WebFluxConfig { @@ -16,7 +17,7 @@ // // @Override // public void addCorsMappings(CorsRegistry registry) { -// registry.addMapping("/**") +// registry.addMapping("http://localhost:5173") // .allowedOrigins("*") // .allowedMethods("*"); // } diff --git a/src/main/java/gwangjang/server/global/exception/GlobalExceptionHandler.java b/src/main/java/gwangjang/server/global/exception/GlobalExceptionHandler.java index 07a0776..00c5b20 100644 --- a/src/main/java/gwangjang/server/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/gwangjang/server/global/exception/GlobalExceptionHandler.java @@ -68,12 +68,7 @@ public Mono handle(ServerWebExchange exchange, Throwable ex) { exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON); responseBody = new ErrorResponse<>(ErrorCode.METHOD_NOT_ALLOWED); - } else if (exceptionClass == Exception.class){ - exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); - exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON); - responseBody = new ErrorResponse<>(ErrorCode.INTERNAL_SERVER_ERROR); - - } else if (exceptionClass == HttpMessageNotReadableException.class){ + } else if (exceptionClass == HttpMessageNotReadableException.class){ exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST); exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON); responseBody = new ErrorResponse<>(ErrorCode.BAD_REQUEST); @@ -83,7 +78,13 @@ public Mono handle(ServerWebExchange exchange, Throwable ex) { exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON); responseBody = new ErrorResponse<>(ErrorCode.BAD_REQUEST); + } else if (exceptionClass == Exception.class){ + exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); + exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON); + responseBody = new ErrorResponse<>(ErrorCode.INTERNAL_SERVER_ERROR); + } + // 성공 시 ?? else { exchange.getResponse().setStatusCode(exchange.getResponse().getStatusCode()); diff --git a/src/main/java/gwangjang/server/global/filter/AuthorizationHeaderFilter.java b/src/main/java/gwangjang/server/global/filter/AuthorizationHeaderFilter.java index 507c8dc..2519fe8 100644 --- a/src/main/java/gwangjang/server/global/filter/AuthorizationHeaderFilter.java +++ b/src/main/java/gwangjang/server/global/filter/AuthorizationHeaderFilter.java @@ -65,8 +65,8 @@ public GatewayFilter apply(Config config) { jwtTokenProvider.validateJwtToken(token); - - String subject = jwtTokenProvider.getUserId(token); +// String subject = jwtTokenProvider.getUserId(token); + String subject = jwtTokenProvider.getSocialId(token); // if (!jwtTokenProvider.getRoles(token).contains("USER")) { // return onError(exchange, "권한 없음", HttpStatus.BAD_REQUEST); diff --git a/src/main/java/gwangjang/server/global/filter/CorsConfiguration.java b/src/main/java/gwangjang/server/global/filter/CorsConfiguration.java index cffb36a..0819a5a 100644 --- a/src/main/java/gwangjang/server/global/filter/CorsConfiguration.java +++ b/src/main/java/gwangjang/server/global/filter/CorsConfiguration.java @@ -1,52 +1,52 @@ -package gwangjang.server.global.filter; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.http.server.reactive.ServerHttpResponse; -import org.springframework.web.cors.reactive.CorsUtils; -import org.springframework.web.server.ServerWebExchange; -import org.springframework.web.server.WebFilter; -import org.springframework.web.server.WebFilterChain; - -import reactor.core.publisher.Mono; - -@Slf4j - -@Configuration -public class CorsConfiguration { - - private static final String ALLOWED_HEADERS = "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN"; - private static final String ALLOWED_METHODS = "GET, PUT, POST, DELETE, OPTIONS"; - private static final String ALLOWED_ORIGIN = "*"; - private static final String MAX_AGE = "3600"; - - @Bean - public WebFilter corsFilter() { - return (ServerWebExchange ctx, WebFilterChain chain) -> { - ServerHttpRequest request = ctx.getRequest(); - if (CorsUtils.isCorsRequest(request) || CorsUtils.isPreFlightRequest(request) ) { - log.info("corsFilter ongoing !"); - ServerHttpResponse response = ctx.getResponse(); - HttpHeaders headers = response.getHeaders(); - headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN); - headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS); - headers.add("Access-Control-Max-Age", MAX_AGE); - headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS); -// response.setStatusCode(HttpStatus.OK); - if (request.getMethod() == HttpMethod.OPTIONS ) { - response.setStatusCode(HttpStatus.OK); - return Mono.empty(); - } - log.info(response.getStatusCode().toString()); - - } - return chain.filter(ctx); - }; - } - -} +//package gwangjang.server.global.filter; +// +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.http.HttpHeaders; +//import org.springframework.http.HttpMethod; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.server.reactive.ServerHttpRequest; +//import org.springframework.http.server.reactive.ServerHttpResponse; +//import org.springframework.web.cors.reactive.CorsUtils; +//import org.springframework.web.server.ServerWebExchange; +//import org.springframework.web.server.WebFilter; +//import org.springframework.web.server.WebFilterChain; +// +//import reactor.core.publisher.Mono; +// +//@Slf4j +// +//@Configuration +//public class CorsConfiguration { +// +// private static final String ALLOWED_HEADERS = "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN"; +// private static final String ALLOWED_METHODS = "GET, PUT, POST, DELETE, OPTIONS"; +// private static final String ALLOWED_ORIGIN = "*"; +// private static final String MAX_AGE = "3600"; +// +// @Bean +// public WebFilter corsFilter() { +// return (ServerWebExchange ctx, WebFilterChain chain) -> { +// ServerHttpRequest request = ctx.getRequest(); +// if (CorsUtils.isCorsRequest(request) || CorsUtils.isPreFlightRequest(request) ) { +// log.info("corsFilter ongoing !"); +// ServerHttpResponse response = ctx.getResponse(); +// HttpHeaders headers = response.getHeaders(); +// headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN); +// headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS); +// headers.add("Access-Control-Max-Age", MAX_AGE); +// headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS); +//// response.setStatusCode(HttpStatus.OK); +// if (request.getMethod() == HttpMethod.OPTIONS ) { +// response.setStatusCode(HttpStatus.OK); +// return Mono.empty(); +// } +// log.info(response.getStatusCode().toString()); +// +// } +// return chain.filter(ctx); +// }; +// } +// +//} diff --git a/src/main/java/gwangjang/server/global/jwt/JwtTokenProvider.java b/src/main/java/gwangjang/server/global/jwt/JwtTokenProvider.java index 2d119f9..e879e52 100644 --- a/src/main/java/gwangjang/server/global/jwt/JwtTokenProvider.java +++ b/src/main/java/gwangjang/server/global/jwt/JwtTokenProvider.java @@ -112,4 +112,9 @@ public boolean equalRefreshTokenId(String refreshTokenId, String refreshToken) { return refreshTokenId.equals(compareToken); } + public String getSocialId(String token) { + log.info("getsocialId! ->{}",Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject()); + return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject(); + } + }