티스토리 뷰

Meta Data 에 GlobalFilter 에 대한 정의도 포함되어 있다. 따라서 GlobalFilter 도 런타임에 Load 하고 bean 으로 등록해야 한다.

 

GLOBAL_CONFIG.json

{
  "filters" : [{
		"filterName" : "HostSettingFilter",
		"args" : {
	  		"host" : "my-host.comm"
		}
  	},
	{
	  "filterName" : "GlobalLoggingFilter",
	  "args" : {}
	},
	{
	  "filterName" : "UnsupportedBrowserFilter",
	  "args" : {
		"unsupportedBrowserRegx" : ".*(MSIE [1-7]\\.).*"
	  }
	}]
}

 

각 GlobalFilter 에 대한 코드는 이미 작성 되어있어야 한다.

작성되어 있는 필터들중 어떤 것을 실제 GlobalFilter 로 사용할지는 Meta Data 를 보고 결정한다.

 

HostSettingFIlter.java

@Slf4j
@ProxyGlobalFilterAnnotation(name = "HostSettingFilter")
public class HostSettingFilter extends ProxyGlobalFilter implements Ordered {

	private final String PROXY_URL;
	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

		ServerHttpRequest request = exchange.getRequest().mutate()
			.headers(httpHeaders -> {
				httpHeaders.remove("Host");
				httpHeaders.add("Host", PROXY_URL);
			}).build();

		// Make sure the header we just set is preserved
		exchange.getAttributes().put(PRESERVE_HOST_HEADER_ATTRIBUTE, true);

		return chain.filter(exchange.mutate().request(request).build());
	}

	@Override
	public int getOrder() {
		return 	Ordered.HIGHEST_PRECEDENCE;
	}
}

 

위와 같이 필터에 대한 정의를 해놓고 Bean 으로 등록하지 않는다.

 

Writing......

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함