23.12.30 11:48 작성
·
285
·
수정됨
0
CustomFilter 클래스는 기동될 때 로그로 찍어서 확인했는데 생성은 되는데 apply 함수가 호출이 안되네요. first ,second, apigateway 프로젝트 재빌드를 해도 호출이 안되네요. pre, post filter log가 호출이 안되는 이유가 무엇인가요?
@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 인턴입니다.
닉네임_한글 가능님, 질문 주신 CustomFilter
의 apply
함수가 호출되지 않는 이유에 대해 설명드리겠습니다. 확인하신 로그에서 CustomFilter
클래스의 생성자 로그는 확인되었지만 apply
메서드 관련 로그가 보이지 않는다는 점을 참고했습니다. filter
를 정의하는 부분과 application.yml
파일의 설정을 확인할 필요가 있습니다.
CustomFilter
를 스프링 클라우드 게이트웨이에 적용하려면 다음 두 가지를 확인해야 합니다:
CustomFilter
클래스가 컴포넌트로 등록되어 있어야 하므로 @Component
어노테이션이 제대로 붙어있는지 확인하시기 바랍니다.
application.yml
의 설정에서 filters
하위에 - CustomFilter
로 필터 이름을 등록했다면, 해당 필터 이름이 CustomFilter
클래스의 이름과 정확히 일치하는지 확인하시기 바랍니다. CustomFilter
가 아닌 다른 이름을 사용하고 계시다면, 실제 클래스 이름으로 변경해야 합니다.
이 두 가지 사항이 확인되면 정상적으로 필터가 적용되어야 합니다. 만약 문제가 지속된다면, 추가적인 스프링 클라우드 게이트웨이 관련 설정도 확인이 필요할 수 있습니다.
참고로 로깅에 대한 문제가 없는지도 확인하시기 바랍니다. 로그 레벨 또는 로그 설정에 따라서 apply
메서드 내부에 있는 로그가 출력되지 않을 가능성도 있으니, 로그 레벨을 INFO
이상으로 설정하여 다시 확인해보시길 권장합니다.
위 내용대로 확인해도 문제가 해결되지 않는다면 CustomFilter
의 등록 방식 또는 스프링 클라우드 게이트웨이와의 호환 문제일 수 있으니, 해당 부분에 대한 추가적인 로깅이나 디버깅을 통해 문제를 해결해 보시기 바랍니다.