본문 바로가기
스프링 스터디 (인프런)/API GATEWAY

Netflix Zuul Filter 적용하기

by 백엔드 개발자 2023. 7. 29.

필터 사용 이유 : 메인 로직 전, 후 작업을 추가할 수 있다.

(ex : 인증 작업이라던가, 로깅, 변환등등)

 

filter 추가

 

ZuulLoggingFilter.java

package com.example.zuulservice.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;


/**
 *  필터 역할을 위해서 ZuulFilter를 상속받는다.
 *
 */
@Slf4j // 로거 객체 정의 없이도 바로 사용할 수 있다.
@Component // 사용용도가 정확하지 않은 상태에서 일반적인 빈형태로 등록하고 싶을 때 컴포넌트를  사용.
public class ZuulLoggingFilter extends ZuulFilter {

    @Override
    public Object run() throws ZuulException {

        log.info("****************** printing logs : ");

        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();

        log.info("***********" + request.getRequestURI());
        log.info("****************** printing logs : ");

        return null;
    }

    @Override
    public String filterType() { /**사전 필터인지 사후 필터인지 구분해주는 역할을 한다.*/
        return "pre";// 사전 필터
    }

    @Override
    public int filterOrder() {//여러개 필터중 순서를 의미하는데, 1개밖에 없어서 1을 사용한다.
        return 1;
    }

    @Override
    public boolean shouldFilter() { // 필터 사용여부를 뜻한다. 사용할 것이기 때문에 true로 변경해준다.
        return true;
    }


}

run : 동작되는 수행부를 의미한다. 해당 실습에서는 사전에 요청을 로깅하는 로직을 run 내부에 작성했다.

 

RequestContext : ?(추가 공부 하기)

HttpServletRequest : (추가 공부 하기) 

 

filterType : 사전, 사후를 구분하는데 쓰인다.

filterOrder : 여러 필터간 순서를 정해줄 수 있다.

shouldFilter : 필터 사용여부 체크 가능.