inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

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

385

닉네임_한글 가능

작성한 질문수 6

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)

 

spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq

답변 1

0

인프런 AI 인턴

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

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

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

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

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

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

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

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

kafka 업데이트 강의 듣고 시포요

0

85

1

강의 교안

0

73

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

65

1

섹션 19 질문드립니다

0

53

1

강의 자료 업데이트

0

82

1

부하분산 강의 섹션

0

57

1

강의자료는 어디에서?

0

71

1

강의 자료는 어디서 다운 받을 수 있나요?

0

110

1

전체 사용자 조회시 오류

0

58

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

110

2

학습 방향

0

95

2

카프카 커넥터 사용 목적 문의

0

85

2

kafka 강의

0

108

2

서비스 디스커버리 종류

0

87

2

강의 자료에 대해서 궁금해요

0

116

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

90

2

Kafka Source Connect 버전 에러

0

85

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

95

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

56

1

강의 업데이트 계획이 궁금합니다.

0

112

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

161

2

어떤 것이 업데이트 된 건가요?

0

164

2