Java/Spring Cloud Gateway

[SCG]Spring Cloud Gateway로 API 게이트웨이 구축 2편| Custom Filter 예제 | Spring Cloud Gateway 예제

a-몬드 2023. 12. 8. 16:55
반응형

1편은 잘 보고 오셨나요? 

이번에는 Filter를 사용해서 Gateway로 온 요청을 Filter쪽에서 이리저리 핸들링을 한번 해보려합니다. 

 

CustomFiter 생성

아래 경로에 filter 폴더와 Cutomfilter class를 생성합니다.

 

dependencies 주입 

compileOnly 'org.projectlombok:lombok'

 

CustomFilter 작성 

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import lombok.Data;
import reactor.core.publisher.Mono;


@Component
public class CustomFilter extends AbstractGatewayFilterFactory<CustomFilter.Config> {
    public CustomFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(CustomFilter.Config config) {
        // 서비스 서버에 요청 보내기 전  Filter 작업
        return ((exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
            ServerHttpResponse response = exchange.getResponse();
            //테스트 확인을 위해 작성
            System.out.println("서비스 서버 요청 보내기 전에 이 문구 찍는지 확인"); 

            // 서비스 서버에서 응답이 오고 난 후 Filter 작업
            return chain.filter(exchange).then(Mono.fromRunnable(() -> {

            }));

        });
    }

    @Data
    public static class Config{
        // Put the configuration properties...
        private String baseMessage;
        private boolean preLogger;
        private boolean postLogger;
    }
}

application.yml에 생성한 Custom Filter 조건 작성  

filters:

  - CustomFilter 만 해주면 됩니다. 

 

 

 

Filter 동작 테스트

break point 를 걸어 서비스에 요청 보내기 전 

멈추는지 확인해 보았습니다. 

잘 멈추고 console에도 문구가 잘 찍힙니다. 

 

 

아래는 사족입니다. 

이렇게 깔끔하고 간단한데 저는 왜 일주일이나 삽질을 했을까요. 

 

주로 다른 블로그들을 찾아보니 유레카 의존성 추가하고 이것 저것 다른것들을 많이 하더군요.

다른 것도 많이 시도해 보았으나

저는 이게 제일 깔끔 담백하니 사용하기 좋았습니다. 

 

유레카 서버를 안쓴 이유는 WebFlux쓸 때 문제가 생겨 유레카는 사용하지 않았습니다. 

역시 제일 심플한게 확장하기 가장 편리합니다. 이것저것 따질 것도 없고 심플 is the best,,,!!!

 

지금은 Custom Filter 하나만 블로그에 작성했지만 

확장은 filter 폴더에 무한대로 filter 작성 가능합니다 저는 그렇게 할거구요... 

토큰 검사 필터 서비스별 따로 처리해줘야하는 필터 각각 다르게 쪼개서 관리하기 아주 편리하겠죠? 

서비스 별로 밑에 filter 추가만 해주면 되니 이렇게 편리할 수가!  

 

사족이 길었네요 3편에서는 Filter내에서 WebFlux로 통신 하는 예제를 들고 오겠습니다. 

 

반응형