• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Custom Filter 적용2 수강중인데 CustomFilter클래스 apply가 호출이 안되네요.

23.12.30 11:48 작성 23.12.31 01:53 수정 조회수 202

0

CustomFilter 클래스는 기동될 때 로그로 찍어서 확인했는데 생성은 되는데 apply 함수가 호출이 안되네요. first ,second, apigateway 프로젝트 재빌드를 해도 호출이 안되네요. pre, post filter log가 호출이 안되는 이유가 무엇인가요?

CustomFilter.java

@Component
@Slf4j
public class CustomFilter extends AbstractGatewayFilterFactory<CustomFilter.Config> {
    public CustomFilter(){
        super(Config.class);
        log.info("TEST TEST");
    }

    @Override
    public GatewayFilter apply(final Config config) {
        log.info(" TEST 1 TEST 2");
        // Custom Pre Filter
        return ((exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
            ServerHttpResponse response = exchange.getResponse();
            log.info("Custom PRE filter : request id -> {}", request.getId());
            // Custom post Filter
            return chain.filter( exchange ).then(Mono.fromRunnable(() -> {
               log.info("Custom POST filter : response code -> {}", response.getStatusCode());
            }));
        })
        ;
    }
    public static class Config{
        // put the configuration properties
    }
}

application.yml

server:
  port: 8000

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8761/eureka

spring:
  application:
    name: apigateway-service

  cloud:
    gateway:
      mvc:
        routes:
          - id: first-service
            uri: http://localhost:8081
            predicates:
              - Path= /first-service/**
            filters:
#              - AddRequestHeader=first-request, first-request-header2
#              - AddResponseHeader=first-response, first-response-header2
                - CustomFilter
          - id: second-service
            uri: http://localhost:8082
            predicates:
              - Path= /second-service/**
            filters:
#              - AddRequestHeader=second-request, second-request-header2
#              - AddResponseHeader=second-response, second-response-header2
                - CustomFilter

 apigateway 로그

 

2023-12-31T01:50:27.862+09:00 WARN 2068 --- [apigateway-service] [ main] trationDelegate$BeanPostProcessorChecker : Bean 'reactorDeferringLoadBalancerExchangeFilterFunction' of type [org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [loadBalancerWebClientBuilderBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies.

2023-12-31T01:50:28.212+09:00 INFO 2068 --- [apigateway-service] [ main] c.e.a.Filter.CustomFilter : TEST TEST

2023-12-31T01:50:28.216+09:00 INFO 2068 --- [apigateway-service] [ main] c.e.a.Filter.GlobalFilter : TEST TEST

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [After]

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Before]

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Between]

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Cookie]

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Header]

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Host]

2023-12-31T01:50:29.192+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Method]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Path]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Query]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [ReadBody]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [RemoteAddr]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [XForwardedRemoteAddr]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Weight]

2023-12-31T01:50:29.193+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [CloudFoundryRouteService]

2023-12-31T01:50:29.564+09:00 INFO 2068 --- [apigateway-service] [ main] DiscoveryClientOptionalArgsConfiguration : Eureka HTTP Client uses RestTemplate.

2023-12-31T01:50:29.922+09:00 WARN 2068 --- [apigateway-service] [ main] iguration$LoadBalancerCaffeineWarnLogger : Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.

2023-12-31T01:50:29.956+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING

2023-12-31T01:50:30.008+09:00 INFO 2068 --- [apigateway-service] [ main] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1

2023-12-31T01:50:30.009+09:00 INFO 2068 --- [apigateway-service] [ main] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data.

2023-12-31T01:50:30.019+09:00 INFO 2068 --- [apigateway-service] [ main] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1703955030017 with initial instances count: 0

2023-12-31T01:50:30.024+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.c.n.e.s.EurekaServiceRegistry : Registering application APIGATEWAY-SERVICE with eureka with status UP

2023-12-31T01:50:30.314+09:00 INFO 2068 --- [apigateway-service] [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8000

2023-12-31T01:50:30.320+09:00 INFO 2068 --- [apigateway-service] [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8000

2023-12-31T01:50:30.708+09:00 INFO 2068 --- [apigateway-service] [ main] c.e.a.ApigatewayServiceApplication : Started ApigatewayServiceApplication in 5.877 seconds (process running for 6.826)

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.01

안녕하세요, 인프런 AI 인턴입니다.

닉네임_한글 가능님, 질문 주신 CustomFilterapply 함수가 호출되지 않는 이유에 대해 설명드리겠습니다. 확인하신 로그에서 CustomFilter 클래스의 생성자 로그는 확인되었지만 apply 메서드 관련 로그가 보이지 않는다는 점을 참고했습니다. filter를 정의하는 부분과 application.yml 파일의 설정을 확인할 필요가 있습니다.

CustomFilter를 스프링 클라우드 게이트웨이에 적용하려면 다음 두 가지를 확인해야 합니다:

  1. CustomFilter 클래스가 컴포넌트로 등록되어 있어야 하므로 @Component 어노테이션이 제대로 붙어있는지 확인하시기 바랍니다.

  2. application.yml의 설정에서 filters 하위에 - CustomFilter로 필터 이름을 등록했다면, 해당 필터 이름이 CustomFilter 클래스의 이름과 정확히 일치하는지 확인하시기 바랍니다. CustomFilter가 아닌 다른 이름을 사용하고 계시다면, 실제 클래스 이름으로 변경해야 합니다.

이 두 가지 사항이 확인되면 정상적으로 필터가 적용되어야 합니다. 만약 문제가 지속된다면, 추가적인 스프링 클라우드 게이트웨이 관련 설정도 확인이 필요할 수 있습니다.

참고로 로깅에 대한 문제가 없는지도 확인하시기 바랍니다. 로그 레벨 또는 로그 설정에 따라서 apply 메서드 내부에 있는 로그가 출력되지 않을 가능성도 있으니, 로그 레벨을 INFO 이상으로 설정하여 다시 확인해보시길 권장합니다.

위 내용대로 확인해도 문제가 해결되지 않는다면 CustomFilter의 등록 방식 또는 스프링 클라우드 게이트웨이와의 호환 문제일 수 있으니, 해당 부분에 대한 추가적인 로깅이나 디버깅을 통해 문제를 해결해 보시기 바랍니다.