본문 바로가기
프로그래밍/SPRING BOOT

Spring boot - HandlerInterceptorAdapter와 zuul Filter 의 사용시 문제

by 애플 로그 2022. 7. 15.
반응형

Spring boot - HandlerInterceptorAdapter와 zuul Filter 의 사용시 문제

 

[문제 발생 내용]

Spring boot application에서 HandlerInterceptorAdapter에 들어오는 사용자의 IP를 체크하는

Interceptor를 넣어서 사용중이었다.

이후 Zuul Gateway api 가 필요하게 되어 을 적용했는데,

Zuul 필터 구성후 인터셉터가 호출이 안되는것이었다.

좀 더 정확하게 이야기하면, Zuul routes 를 타는 경우에만 인터셉터가 호출이 안된다.

 

[해결 방법]

간단하게 해결이 가능하다, 아래와 같은 Class를 생성해주면 된다.

InstantiationAwareBeanPostProcessorAdapter를 상속받고 zuulMapping에 해당 사용할 인터셉터를 설정해주면 된다

import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter;
import org.springframework.cloud.netflix.zuul.web.ZuulHandlerMapping;
import org.springframework.context.annotation.Configuration;
import spectra.attic.coreasset.legacyadapter.intercepter.IpCheckInterceptor;

@Configuration
@RequiredArgsConstructor
public class ZuulHandlerBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter {

    @NonNull
    // 사용할 인터셉터 class 
    // HandlerInterceptorAdapter를 상속 구현한 class
    private final IpCheckInterceptor ipCheckInterceptor;  

    @Override
    public boolean postProcessAfterInstantiation(final Object bean, final String beanName) throws BeansException {

        if (bean instanceof ZuulHandlerMapping) {

            val zuulHandlerMapping = (ZuulHandlerMapping) bean;
            zuulHandlerMapping.setInterceptors(ipCheckInterceptor);
        }
        return super.postProcessAfterInstantiation(bean, beanName);
    }
}

 

[다른글 - Zuul API 구성하기]

[프로그래밍/SPRING] - Zuul API GATEWAY - 초간단 설정

 

Zuul API GATEWAY - 초간단 설정

Zuul API GATEWAY - 초간단 설정 Zuul이 뭐야? Zuul은 Netflix에서 개발한 Gateway 오픈 라이브러리 이다. Gateway 는 뭐야? zuul lib를 이용하여 Gateway 서버를 만들수 있다. ( proxy 서버라고 표현하기도..

www.appletong.com

 

댓글