Today
-
Yesterday
-
Total
-
  • 스프링 게이트웨이 설정
    카테고리 없음 2020. 11. 12. 00:16
    package com.poscoict.onm.apigw.filter;
    
    import com.poscoict.onm.apigw.model.dto.UserDto;
    import io.micrometer.core.instrument.util.JsonUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.cloud.gateway.filter.GatewayFilter;
    import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
    import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
    import org.springframework.http.server.reactive.ServerHttpRequest;
    import org.springframework.http.server.reactive.ServerHttpResponse;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    import org.springframework.web.server.ServerWebExchangeDecorator;
    import org.springframework.web.server.WebSession;
    import reactor.core.publisher.Mono;
    
    import java.security.Principal;
    
    @Component
    public class MyAddRequestHeaderGatewayFilterFactory extends AbstractGatewayFilterFactory<MyAddRequestHeaderGatewayFilterFactory.Config> {
    
        public MyAddRequestHeaderGatewayFilterFactory() {
            super(MyAddRequestHeaderGatewayFilterFactory.Config.class);
        }
    
        @Override
        public GatewayFilter apply(Config config) {
    //      1. 헤더에 정보를 세팅하는 경우 case1
    //        return (exchange, chain) -> {
    //            ServerHttpRequest request =
    //                  exchange.getRequest().mutate()
    //                    .header("authuser", "사용자이름")
    //                    .build();
    //            return chain.filter(exchange.mutate().request(request).build());
    //        };
    
    //      2. 헤더에 사용자 정보만 넘기는 경우 case2
            return (exchange, chain) -> exchange.getPrincipal()
                    .map(Principal::getName)
                    .defaultIfEmpty("unauthorized")
                    .map(userName -> {
                        //adds header to proxied request
                        exchange
                                .getRequest()
                                .mutate()
                                .header("authuser", userName)
                                .build();
                        return exchange;
                    })
                    .flatMap(chain::filter);
        }
    
        public static class Config {
            //Put the configuration properties for your filter here
        }
    }
    spring:
      profiles: local
      cloud:
        gateway:
          routes:
            - id: dummy_a
              uri: http://localhost:8881
              predicates:
                - Path=/a/**
              filters:
                - MyAddRequestHeader
                - PreserveHostHeader
                - SaveSession
                - RewritePath=/a(?<segment>/?.*), /${segment}
            - id: dummy_b
              uri: http://localhost:8882
              predicates:
                - Path=/b/**
              filters:
                - MyAddRequestHeader
                - PreserveHostHeader
                - SaveSession
                - RewritePath=/b(?<segment>/?.*), /${segment}

    댓글

Designed by Tistory.