Spring Cloud Gateway - Custom Filter

| Custom Filter


Custom Filter를 적용하기 위해서는 AbstractGatewayFilterFactory를 상속받아 사용해야한다.

JWT - json web token

CustomFilter.java

package com.kyhslam.apigatewayservice.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Component
@Slf4j
public class CustomFilter extends AbstractGatewayFilterFactory<CustomFilter.Config> {

    public CustomFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        // 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 {

    }
}

 

Mono를 알려면 webflux를 공부해야 한다.

 

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:
      routes:
        - id: first-service
          uri: http://localhost:8081/
          predicates:
            - Path=/first-service/**
          filters:
            - CustomFilter
        - id: second-service
          uri: http://localhost:8082/
          predicates:
            - Path=/second-service/**
          filters:
            - CustomFilter

'📚 Spring > Spring Cloud' 카테고리의 다른 글

Spring Cloud Gateway - Logging Filter  (0) 2021.09.29
Spring Cloud Gateway - Global Filter  (0) 2021.09.27
Spring Cloud Gateway - Filter  (0) 2021.09.24
Spring Cloud Gateway란?  (0) 2021.09.23
API Gateway란? (Spring Cloud Gateway)  (0) 2021.09.22

댓글

Designed by JB FACTORY