ズールゲートウェイゲートウェイゲートウェイ
パブリッククラスCorsWebFilterはWebFilter {
プライベート静的最終文字列ALL = "*";
プライベート静的最終文字列MAX_AGE = "18000L";
@オーバーライド
public Mono <Void> filter(ServerWebExchange ctx、WebFilterChain chain){
ServerHttpRequestリクエスト= ctx.getRequest();
文字列path = request.getPath()。value();
ServerHttpResponse応答= ctx.getResponse();
if( "/ favicon.ico" .equals(path)){
response.setStatusCode(HttpStatus.OK);
Mono.empty();を返します。
}
if(!CorsUtils.isCorsRequest(request)){
return chain.filter(ctx);
}
HttpHeaders requestHeaders = request.getHeaders();
HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
HttpHeaders headers = response.getHeaders();
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN、requestHeaders.getOrigin());
headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS、requestHeaders.getAccessControlRequestHeaders());
if(requestMethod!= null){
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS、requestMethod.name());
}
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS、 "true");
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS、ALL);
headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE、MAX_AGE);
if(request.getMethod()== HttpMethod.OPTIONS){
response.setStatusCode(HttpStatus.OK);
Mono.empty();を返します。
}
return chain.filter(ctx);
}
}