Skip to content

Commit

Permalink
Merge pull request #8 from kusitms-28th-Meetup-E/feat/global
Browse files Browse the repository at this point in the history
fix : cors 설정 변경 및 gateway uri 변경
seungueonn authored Nov 10, 2023

Verified

This commit was signed with the committer’s verified signature.
furkatgofurov7 Furkat Gofurov
2 parents e05dd03 + 7f3e2ee commit 9d85012
Showing 6 changed files with 113 additions and 106 deletions.
Original file line number Diff line number Diff line change
@@ -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<Object> 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<Object> 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);
// }
//}
Original file line number Diff line number Diff line change
@@ -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("*");
// }
Original file line number Diff line number Diff line change
@@ -68,12 +68,7 @@ public Mono<Void> 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<Void> 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());
Original file line number Diff line number Diff line change
@@ -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);
104 changes: 52 additions & 52 deletions src/main/java/gwangjang/server/global/filter/CorsConfiguration.java
Original file line number Diff line number Diff line change
@@ -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);
// };
// }
//
//}
Original file line number Diff line number Diff line change
@@ -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();
}

}

0 comments on commit 9d85012

Please sign in to comment.