18 Nisan 2022 Pazartesi

SpringCloud Gateway GlobalFilter Arayüzü

Giriş
GlobalFilter ve GatewayFilter benziyorlar

Örnek
Şöyle yaparız
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.nio.charset.StandardCharsets;

public class PostGlobalFilter implements GlobalFilter, Ordered {

  ...

  @Override
  public int getOrder() {
    return 0;
  }
}
Metodun içi şöyle
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  return chain.filter(exchange).then(Mono.fromRunnable(()->{
    ServerHttpResponse response = exchange.getResponse();
    HttpStatus responseStatus = response.getStatusCode();
    if(responseStatus.equals(HttpStatus.BAD_REQUEST)){
      String newResponseBody =
      "<body>\n" +
      "<h1 style=\"color:red;text-align:center\">Bad Request </h1>\n" +
      "<p>If you are seeing this page it means response body is modified.</p>\n" +
      "</body>";

      DataBuffer dataBuffer = response.bufferFactory()
        .wrap(newResponseBody.getBytes(StandardCharsets.UTF_8));
      response.getHeaders().setContentLength(newResponseBody.length());
      response.writeWith(Mono.just(dataBuffer)).subscribe();
      exchange.mutate().response(response).build();
    }
  }));
}


Hiç yorum yok:

Yorum Gönder