API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) · leksjon

For- og etterbehandling med filtre

Bruk filtre til handlinger før (pre) en forespørsel når tjenesten, og etter (post) at tjenesten har svart.

Leksjon 3 av 411 trinn

For- og etterbehandling med filtre er en gratis leksjon i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) inneholder totalt 4 leksjoner.

Introduksjon til pre- og post-filtre

Velkommen! I denne leksjonen skal vi utforske hvordan Spring Cloud Gateway-filtre kan behandle forespørsler før de når en backend-tjeneste (forbehandling), og etter at tjenesten svarer (etterbehandling).

Denne detaljerte kontrollen er avgjørende for å håndtere komplekse oppgaver i en API-gateway.

Filterkjeden på nytt

Husk at filtre opererer i en kjede. Hvert GatewayFilter eller GlobalFilter kan utføre handlinger:

  • Før chain.filter(exchange) kalles: Dette er forbehandling.
  • Etter at chain.filter(exchange) returnerer en Mono<Void>: Dette er etterbehandling.

Den reaktive oppbygningen i Spring Cloud Gateway, som bruker Mono, gjør denne sekvensielle kjøringen kraftig.

Forbehandling: Før tjenesten

Filtre for forbehandling kjøres før gatewayen videresender forespørselen til den faktiske backend-tjenesten. Tenk på dem som interceptor-er for innkommende forespørsler.

Vanlige oppgaver under forbehandling er:

  • Autentisere og autorisere forespørsler
  • Legge til eller endre forespørselsheadere
  • Skrive om URL-banen eller spørringsparametere
  • Implementere hastighetsbegrensning

Eksempel på pre-filter: Legge til header

La oss se på et enkelt eksempel på forbehandling: å legge til en egendefinert header i forespørselen før den når tjenesten. Spring Cloud Gateway tilbyr innebygde filtre som AddRequestHeader for dette.

Denne konfigurasjonen legger til en X-Request-Source-header med verdien gateway i alle forespørsler som samsvarer med banen /api/pre/**.

spring:
  cloud:
    gateway:
      routes:
        - id: pre_header_route
          uri: http://localhost:8080/service/echo
          predicates:
            - Path=/api/pre/**
          filters:
            - AddRequestHeader=X-Request-Source, gateway

Kjørbar kode for pre-filter

Prøv å kjøre denne komplette Spring Boot-applikasjonen. Den setter opp en gateway som legger til en forespørselsheader og ruter til et enkelt ekkoendepunkt i samme applikasjon. Sjekk konsollen eller svaret fra backend-tjenesten for å se den nye headeren!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class GatewayApp {

  public static void main(String[] args) {
    SpringApplication.run(GatewayApp.class, args);
  }

  // Dummy backend service to echo headers
  @GetMapping("/service/echo")
  public String echoHeaders(@RequestHeader(required = false) java.util.Map<String, String> headers) {
    return "Backend received headers: " + headers.get("x-request-source");
  }

  @Bean
  public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
      .route("pre_header_route", r -> r.path("/api/pre/**")
        .filters(f -> f.addRequestHeader("X-Request-Source", "gateway"))
        .uri("http://localhost:8080/service/echo")) // Route to its own dummy backend
      .build();
  }
}

Etterbehandling: Etter tjenesten

Filtre for etterbehandling kjøres etter at backend-tjenesten har svart, men før gatewayen sender svaret tilbake til klienten.

Dette lar deg undersøke eller endre svaret fra backend-tjenesten.

Vanlige oppgaver under etterbehandling er:

  • Endre svarheadere eller svarbrødtekst
  • Logge svardetaljer (status og forsinkelse)
  • Legge til måledata for svarbehandlingen
  • Implementere hurtigbufring av svar

Egendefinert etterbehandlingsfilter

For etterbehandling må du ofte opprette egendefinerte filtre. Disse filtrene bruker Mono-objektet som returneres av chain.filter(exchange), for å legge til logikk som kjøres når behandlingen fullføres.

Mønsteret .then(Mono.fromRunnable(() -> { ... })) er vanlig for handlinger under etterbehandling.

Kjørbar kode for post-filter

Her er en komplett Spring Boot-applikasjon med et egendefinert GlobalFilter som legger til en X-Post-Processed-header i hvert svar. Legg merke til hvordan filterlogikken kjedes sammen ved hjelp av .then(Mono.fromRunnable(...)).

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@SpringBootApplication
@RestController
public class GatewayApp {

  public static void main(String[] args) {
    SpringApplication.run(GatewayApp.class, args);
  }

  // Dummy backend service
  @GetMapping("/service/data")
  public String getData() {
    return "Backend response data!";
  }

  @Bean
  public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
      .route("post_filter_route", r -> r.path("/api/post/**")
        .uri("http://localhost:8080/service/data")) // Route to itself
      .build();
  }
}

@Component
class CustomPostFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            // This code runs AFTER the downstream service responds
            exchange.getResponse().getHeaders().add("X-Post-Processed", "true");
            System.out.println("Post-processing: Added X-Post-Processed header.");
        }));
    }

    @Override
    public int getOrder() {
        return -1; // Execute relatively late in the filter chain
    }
}

Pre og post: Viktige forskjeller

Det er viktig å forstå når du skal bruke for- og etterbehandling:

  • Pre-filtre: Behandler forespørselen før den forlater gatewayen. Ideelt for sikkerhet, rutingslogikk og transformasjon av forespørsler.
  • Post-filtre: Behandler svaret etter at det kommer tilbake fra backend-tjenesten. Ideelt for transformasjon av svar, logging av svardetaljer og innsamling av måledata.

Velg riktig trinn for å håndtere API-trafikken effektivt.

Utfordring om filtertidspunkt

Se for deg et Spring Cloud Gateway-oppsett. Hvilke av disse oppgavene utføres vanligvis av filtre før en forespørsel videresendes til en backend-tjeneste?

Oppsummering: For- og etterbehandling

Godt jobbet! Du har lært om det kraftige konseptet forhåndsbehandling og etterbehandling med Spring Cloud Gateway-filtre.

  • Forhåndsfiltre endrer forespørsler før de når backend-systemet.
  • Etterfiltre endrer svar etter at backend-systemet har svart.
  • Den reaktive Mono-kjeden gir presis kontroll over når filtrene kjøres.

Denne forståelsen er avgjørende for å bygge robuste og funksjonsrike API-gatewayer!

Gratis å komme i gang

Lær deg API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «For- og etterbehandling med filtre» gratis?

Ja – hele teksten i «For- og etterbehandling med filtre» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-kurset, kan du oppgradere til CoddyKit PRO. Kurset i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) inneholder totalt 4 leksjoner.

Hva lærer jeg i «For- og etterbehandling med filtre»?

Bruk filtre til handlinger før (pre) en forespørsel når tjenesten, og etter (post) at tjenesten har svart. Du øver på API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)?

Ingen tidligere erfaring er nødvendig. API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «For- og etterbehandling med filtre»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-leksjonen?

Ja. Alle API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Globale filtre og GatewayFilterFactory
  2. Egendefinerte forespørsels- og responsfiltre
  3. For- og etterbehandling med filtre
  4. Innebygde GatewayFilters du bør kjenne til
← Tilbake til API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)