Pre- en postprocessing met filters
Pas filters toe voor acties vóór (pre) een aanvraag de service bereikt en nadat (post) de service antwoordt.
Pre- en postprocessing met filters is een gratis API-gateway en reverse proxy (Nginx + Spring Cloud Gateway)-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject API-gateway en reverse proxy (Nginx + Spring Cloud Gateway). Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) bevat in totaal 4 lessen.
Introductie tot pre- en postfilters
Welkom! In deze les onderzoeken we hoe filters van Spring Cloud Gateway verzoeken kunnen verwerken voordat ze een backendservice bereiken (voorbewerking) en nadat de service reageert (n verwerking).
Deze gedetailleerde controle is essentieel voor het afhandelen van complexe taken in een API-gateway.
De filterketen opnieuw bekeken
Je weet nog dat filters in een keten werken. Elke GatewayFilter of GlobalFilter kan acties uitvoeren:
- Vóór het aanroepen van
chain.filter(exchange): dit is voorbewerking. - Nadat
chain.filter(exchange)eenMono<Void>teruggeeft: dit is nabewerking.
Dankzij het reactieve karakter van Spring Cloud Gateway, dat Mono gebruikt, is deze sequentiële uitvoering krachtig.
Voorbewerking: vóór de service
Filters voor voorbewerking worden uitgevoerd voordat de gateway het verzoek doorstuurt naar je eigenlijke backendservice. Zie ze als onderscheppers voor binnenkomende verzoeken.
Veelvoorkomende taken vóór de verwerking zijn:
- Verzoeken authenticeren en autoriseren
- Verzoekheaders toevoegen of wijzigen
- Het URL-pad of de queryparameters herschrijven
- Snelheidsbeperking implementeren
Voorfiltervoorbeeld: header toevoegen
Bekijk een eenvoudig voorbeeld van voorbewerking: een aangepaste header toevoegen aan het verzoek voordat dit de service bereikt. Spring Cloud Gateway biedt hiervoor ingebouwde filters zoals AddRequestHeader.
Deze configuratie voegt een X-Request-Source-header met de waarde gateway toe aan alle verzoeken die overeenkomen met het pad /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, gatewayUitvoerbare code voor een voorfilter
Probeer deze volledige Spring Boot-applicatie uit te voeren. De applicatie stelt een gateway in die een verzoekheader toevoegt en doorstuurt naar een eenvoudig echo-eindpunt binnen dezelfde applicatie. Controleer de console of reactie van de backend om de toegevoegde header te zien!
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();
}
}Nabewerking: na de service
Filters voor nabewerking worden uitgevoerd nadat de backendservice heeft gereageerd, maar voordat de gateway die reactie terugstuurt naar de client.
Zo kun je de reactie van de backend bekijken of wijzigen.
Typische taken voor nabewerking zijn:
- Reactieheaders of de hoofdtekst wijzigen
- Gegevens over de reactie loggen (status, latentie)
- Metingen voor de verwerking van reacties toevoegen
- Reacties cachen
Aangepaste filter voor nabewerking
Voor nabewerking moet je vaak aangepaste filters maken. Deze filters gebruiken de Mono die door chain.filter(exchange) wordt teruggegeven om logica toe te voegen die na succesvolle voltooiing wordt uitgevoerd.
Het patroon .then(Mono.fromRunnable(() -> { ... })) wordt vaak gebruikt voor nabewerkingsacties.
Uitvoerbare code voor een nafilter
Hier is een volledige Spring Boot-applicatie met een aangepaste GlobalFilter die een X-Post-Processed-header aan elke reactie toevoegt. Let erop hoe de filterlogica wordt gekoppeld met .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
}
}Voorbewerking versus nabewerking: belangrijkste verschillen
Het is belangrijk om te begrijpen wanneer je voor- en nabewerking gebruikt:
- Voorfilters: Werken op het verzoek voordat dit de gateway verlaat. Ideaal voor beveiliging, routeringslogica en verzoektransformatie.
- Nafilters: Werken op de reactie nadat deze van de backend is teruggekomen. Ideaal voor reactietransformatie, het loggen van reactiegegevens en het verzamelen van metingen.
Kies de juiste fase om je API-verkeer efficiënt te beheren.
Uitdaging: filtertiming
Bekijk een Spring Cloud Gateway-configuratie. Welke van deze taken worden doorgaans uitgevoerd door filters voordat een verzoek naar een backendservice wordt doorgestuurd?
Samenvatting: voor- en nabewerking
Goed gedaan! Je hebt kennisgemaakt met het krachtige concept van voor- en nabewerking met Spring Cloud Gateway-filters.
- Voorfilters wijzigen aanvragen voordat deze de backend bereiken.
- Na filters wijzigen antwoorden nadat de backend heeft geantwoord.
- De reactieve
Mono-keten biedt nauwkeurige controle over het moment waarop filters worden uitgevoerd.
Dit inzicht is essentieel voor het bouwen van robuuste API-gateways met uitgebreide functionaliteit!
Leer API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Pre- en postprocessing met filters” gratis?
Ja — de volledige tekst van “Pre- en postprocessing met filters” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) bevat in totaal 4 lessen.
Wat leer ik in “Pre- en postprocessing met filters”?
Pas filters toe voor acties vóór (pre) een aanvraag de service bereikt en nadat (post) de service antwoordt. Je oefent met API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) te beginnen?
Ervaring vooraf is niet nodig. API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Pre- en postprocessing met filters”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over API-gateway en reverse proxy (Nginx + Spring Cloud Gateway)?
Ja. Elke les over API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Globale filters en GatewayFilterFactory
- Aangepaste aanvraag- en antwoordfilters
- Pre- en postprocessing met filters
- Ingebouwde GatewayFilters die u moet kennen