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.
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 enMono<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, gatewayKjø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!
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
- Globale filtre og GatewayFilterFactory
- Egendefinerte forespørsels- og responsfiltre
- For- og etterbehandling med filtre
- Innebygde GatewayFilters du bør kjenne til