application.yml Spring Cloud Gateway에서 사용자 지정 필터를 지정하는 방법
사용자 지정 게이트웨이 필터 MYGatewayFilter.java 파일이 있습니다. 이제 application.yml에 기록된 경로로 이 게이트웨이 필터를 사용합니다.
spring:
cloud:
gateway:
routes:
- id: login2_route
uri: http://127.0.0.1:8083/login
predicates:
- Path: /login/
filters:
위 경로에 대한 필터를 어떻게 정의합니까?
사용자 지정 필터 My GatewayFilter.java
public class MyGatewayFilter implements GatewayFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request;
if(request.getHeaders().get("x-mydata")!=null){
request= exchange.getRequest().mutate().header("my-new-header",request.getHeaders().get("x-mydata").get(0)).build();
}
return chain.filter(exchange.mutate().request(request).build());
}
}
GatewayFilter를 구현하는 대신 GatewayFilterFactory를 구현해야 합니다.
구성요소로 만듭니다.
@Component
public class MyGatewayFilter implements GatewayFilterFactory {
그러면 당신은 당신의 경로에 있는 콩 이름으로 그것을 참조할 수 있습니다.
filters:
- MyGatewayFilter
이것에 대한 문서는 현재 별로 좋지 않습니다.나는 github에서 스프링-클라우드 게이트웨이의 소스 코드를 보고 이것을 알아낼 수 있었습니다.
구현해야 합니다.GatewayFilterFactory
@Component
public class DemoGatewayFilter implements GatewayFilterFactory<DemoGatewayFilter.Config> {
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
System.out.println("gateway filter name "+config.getName());
return chain.filter(exchange);
};
}
@Override
public Config newConfig() {
return new Config("DemoGatewayFilter");
}
public static class Config {
public Config(String name){
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
및 application.yml 파일에서
spring:
application:
cloud:
gateway:
routes:
- id: MayApplication
uri: http://myapplication:8080
predicates:
- Path=/apipath/to/filter/**
filters:
- DemoGatewayFilter
Spring Cloud Gateway 2.2.1에 몇 가지 변경 사항이 있는 것 같습니다.
SaveSessionGatewayFilterFactory.java를 참조했습니다.
@Component
public class DemoGatewayFilter extends AbstractGatewayFilterFactory {
@Override
public GatewayFilter apply(Object config) {
return (exchange, chain) -> {
return chain.filter(exchange);
};
/*
it works too
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return chain.filter(exchange);
}
}
*/
}
}
및 application.yml 파일에서
spring:
application:
cloud:
gateway:
routes:
- id: MayApplication
uri: http://myapplication:8080
predicates:
- Path=/api/path/to/filter/**
filters:
- DemoGatewayFilter
언급URL : https://stackoverflow.com/questions/48221295/how-to-specify-custom-filter-in-application-yml-spring-cloud-gateway
'programing' 카테고리의 다른 글
시작할 때 Spring Cloud Config Server가 PropertySource를 찾을 수 없음 (0) | 2023.08.13 |
---|---|
Eclipse용 PHP Mess 디텍터 (0) | 2023.08.13 |
jQuery로 파일 입력 크기를 확인하는 방법은 무엇입니까? (0) | 2023.08.13 |
VBA를 사용하여 Excel과 수직으로 병합된 셀의 시작 범위 및 종료 범위 가져오기 (0) | 2023.08.13 |
바인딩 보기 - 포함된 레이아웃에 대한 바인딩을 가져오려면 어떻게 해야 합니까? (0) | 2023.08.13 |