본문 바로가기
실습/리눅스 서버 + 스프링 부트

Spring WebFlux Filter

by 이민우 2022. 7. 25.
728x90
반응형

처음으로 Spring Webflux를 이용한 프로젝트에 투입되었다.

 

해당 프로젝트의 요구사항 중에는 Request의 특정 Header에 URL이 들어오는데, 해당 URL에 접속하여 그 안의 정보를 파싱해서 DB에 유지해야 하는 요구사항이 존재했다.

 

이 요구사항을 식별했을 때 "이 정도면 Filter를 사용하면 쉽게 해결되겠는데?" 라는 생각이 들었고, 평소와 다를 것 없이 Filter를 작성하려고 했으나 실패했다.

 

Spring Web과 달리 Spring Webflux는 별도의 방식으로 Filter를 제공하기 때문이았다.

 

Spring Webflux에서 Filter를 사용하기 위해서는 org.springframework.web.server.WebFilter를 상속받은 클래스를 생성해야 한다.

 

해당 클래스는 filter 라는 이름의 메소드를 오버라이딩 하여 갖고 있어야 하며, 필터 로직은 해당 메소드 내에서 작동한다.

 

즉 기존 Spring Web과의 차이점은 아래의 표와 같다.

  Spring Web Spring Webflux
패키지 javax.servlet.Filter org.springframework.web.server.WebFilter
필터 로직 함수명 doFilter filter
다음 필터로 이동 FilterChain.doFilter return ServerWebExchange.filter

 

코드 예시는 아래와 같다.

import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;

import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;

@Slf4j
@Component
public class LinkManageFilter implements WebFilter {
   @Override
   public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
      
      // 헤더 내 특정 키를 가진 헤더 탐색
      if(exchange.getRequest().getHeaders().containsKey(KEY)) {
         // 헤더 내 특정 키를 가진 헤더 로드
         String LinkHeader = exchange.getRequest().getHeaders().get("Link").get(0); // 리스트 형식으로 반환된다.
		 ...
      }
      
      return chain.filter(exchange);
   }  
}
728x90
반응형

'실습 > 리눅스 서버 + 스프링 부트' 카테고리의 다른 글

JPA 페이징  (0) 2022.07.25
application.properties (yml) 암호화  (0) 2022.07.25
Spring Security rememberMe (자동 로그인)  (0) 2022.07.25
Ehcache  (0) 2022.04.02
Redis In Java_메시지 큐  (0) 2022.03.20