Spring Cloud 는 기본적으로 Netty를 사용하는 비동기 방식의 웹서버를 지원합니다.
Spring Cloud는 기본적으로 yml을 통한 설정과 자바 코드를 통해 설정하는 두 가지 방식을 지원합니다.
이번에 알아볼 것은 yml을 통해 사용하는 방법입니다.
application.yml
spring:
application:
name: apigateway-service
cloud:
gateway:
default-filters:
- name: AuthFilter
args:
preLogger: true
postLogger: true
routes:
- id: test-server
uri: http://localhost:8081/ # http://localhost:8081/ (이동될 주소)
predicates: # 해당 라우터의 조건 (사용자가 입력한 주소) /test-service/**로 들어오는 요청은 모두 test-service로 보낸다.
- Path=/test-server/**
filters:
- AuthFilter
로 사용이 가능합니다.
글로벌 필터의 경우 아규먼트를 통해 필터에 지정된 값을 넘겨 줄 수 있습니다.
@Component
@Slf4j
public class AuthFilter extends AbstractGatewayFilterFactory<AuthFilter.Config> {
public AuthFilter() {
super(Config.class);
}
@Data
public static class Config {
private boolean preLogger;
private boolean postLogger;
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
log.info("Global Filter Start : request id -> {}", request.getId());
if (config.isPreLogger()) {
log.info("리스폰스 오기 전 로그");
}
// 리스폰스 받은 경우
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
if (config.isPostLogger()) {
log.info("Global Filter End : response code -> {}", response.getStatusCode());
}
}));
};
}
}

위와 같이 정상적으로 적용이 완료되었고 인자를 통해 값이 넘어 온 것을 확인 하실 수 있습니다.
만약 인증,인가 서버로 사용할 경우
response.setRawStatusCode(403);
return response.setComplete();
위 코드를 추가하여 리스폰스를 받지 않고 403 status를 리턴 할 수 있습니다.
'Java' 카테고리의 다른 글
Spring Cloud GateWay API 인가 서버 구현 (0) | 2024.06.16 |
---|---|
Java Spring WebFlux + MySQL CRUD 예제 (0) | 2024.06.16 |
자바 프로세스 메모리 증가 (0) | 2024.06.01 |
자바 멀티 스레드 프로그래밍 (0) | 2024.05.20 |
Java float와 double의 부동소수점 연산 차이 (0) | 2024.05.18 |