Esikäsittely ja jälkikäsittely suodattimilla
Soveltakaa suodattimia toimintoihin, jotka suoritetaan ennen pyynnön saapumista palveluun (pre) ja palvelun vastaamisen jälkeen (post).
Esikäsittely ja jälkikäsittely suodattimilla on ilmainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.
Johdatus ennen- ja jälkeen-suodattimiin
Tervetuloa! Tässä oppitunnissa tutustumme siihen, miten Spring Cloud Gateway -suodattimet voivat käsitellä pyyntöjä ennen niiden saapumista taustapalveluun (esikäsittely) ja sen jälkeen, kun palvelu on vastannut (jälkikäsittely).
Tämä tarkka hallinta on ratkaisevan tärkeää monimutkaisten API-yhdyskäytävätehtävien käsittelyssä.
Suodatinketju uudelleen tarkasteltuna
Muistattehan, että suodattimet toimivat ketjuna. Jokainen GatewayFilter tai GlobalFilter voi suorittaa toimintoja:
- Ennen
chain.filter(exchange)-kutsua: kyseessä on esikäsittely. - Sen jälkeen, kun
chain.filter(exchange)palauttaa arvonMono<Void>: kyseessä on jälkikäsittely.
Spring Cloud Gatewayn reaktiivinen luonne ja Mono-tyypin käyttö tekevät tästä peräkkäisestä suorituksesta tehokasta.
Esikäsittely: ennen palvelua
Esikäsittelysuodattimet suoritetaan ennen kuin yhdyskäytävä välittää pyynnön varsinaiselle taustapalvelulle. Niitä voi ajatella saapuvien pyyntöjen sieppaajina.
Yleisiä esikäsittelytehtäviä ovat:
- Pyyntöjen todentaminen ja valtuuttaminen
- Pyyntöotsakkeiden lisääminen tai muokkaaminen
- URL-polun tai kyselyparametrien uudelleenkirjoittaminen
- Nopeusrajoitusten toteuttaminen
Esisuodattimen esimerkki: otsakkeen lisääminen
Tarkastellaan yksinkertaista esikäsittelyesimerkkiä: mukautetun otsakkeen lisäämistä pyyntöön ennen sen saapumista palveluun. Spring Cloud Gateway tarjoaa tähän valmiita suodattimia, kuten AddRequestHeader-suodattimen.
Tämä määritys lisää otsakkeen X-Request-Source arvolla gateway kaikkiin pyyntöihin, jotka vastaavat polkua /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, gatewaySuoritettava esisuodattimen koodi
Kokeilkaa tämän täydellisen Spring Boot -sovelluksen suorittamista. Se määrittää yhdyskäytävän, joka lisää pyyntöotsakkeen ja reitittää pyynnön saman sovelluksen yksinkertaiseen kaikupalvelun päätepisteeseen. Tarkistakaa taustajärjestelmän konsoli tai vastaus nähdäksenne lisätyn otsakkeen!
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();
}
}Jälkikäsittely: palvelun jälkeen
Jälkikäsittelysuodattimet suoritetaan sen jälkeen, kun taustapalvelu on vastannut, mutta ennen kuin yhdyskäytävä lähettää vastauksen takaisin asiakkaalle.
Näin voitte tarkastella taustapalvelun vastausta tai muokata sitä.
Tyypillisiä jälkikäsittelytehtäviä ovat:
- Vastausotsakkeiden tai rungon muokkaaminen
- Vastauksen tietojen kirjaaminen (tila ja viive)
- Vastausten käsittelyn mittareiden lisääminen
- Vastausten välimuistin toteuttaminen
Mukautettu jälkikäsittelysuodatin
Jälkikäsittelyä varten on usein luotava mukautettuja suodattimia. Nämä suodattimet käyttävät chain.filter(exchange)-kutsun palauttamaa Mono-arvoa sellaisen logiikan lisäämiseen, joka suoritetaan onnistuneen valmistumisen yhteydessä.
Jälkikäsittelytoiminnoissa käytetään yleisesti rakennetta .then(Mono.fromRunnable(() -> { ... })).
Suoritettava jälkisuodattimen koodi
Tässä on täydellinen Spring Boot -sovellus, jossa mukautettu GlobalFilter lisää X-Post-Processed-otsakkeen jokaiseen vastaukseen. Huomatkaa, miten suodatinlogiikka ketjutetaan rakenteella .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
}
}Ennen vai jälkeen: keskeiset erot
Esikäsittelyn ja jälkikäsittelyn käyttötarkoitusten ymmärtäminen on tärkeää:
- Esisuodattimet: Käsittelevät pyyntöä ennen kuin se poistuu yhdyskäytävästä. Ne sopivat esimerkiksi tietoturvaan, reitityslogiikkaan ja pyyntöjen muuntamiseen.
- Jälkisuodattimet: Käsittelevät vastausta sen palattua taustapalvelusta. Ne sopivat esimerkiksi vastauksen muuntamiseen, vastaustietojen kirjaamiseen ja mittareiden keräämiseen.
Valitkaa oikea vaihe API-liikenteen tehokasta hallintaa varten.
Suodattimien ajoituksen haaste
Ajatellaan Spring Cloud Gateway -kokoonpanoa. Mitkä seuraavista tehtävistä suodattimet tyypillisesti suorittavat ennen pyynnön välittämistä taustapalvelulle?
Kertaus: esikäsittely ja jälkikäsittely
Hienoa työtä! Olette oppineet Spring Cloud Gateway -suodattimien tehokkaasta esikäsittelyn ja jälkikäsittelyn käsitteestä.
- Esisuodattimet muokkaavat pyyntöjä ennen niiden saapumista taustajärjestelmään.
- Jälkisuodattimet muokkaavat vastauksia taustajärjestelmän vastattua.
- Reaktiivinen
Mono-ketju mahdollistaa suodattimien suoritusajankohdan tarkan hallinnan.
Tämä ymmärrys on välttämätön vankkojen ja monipuolisten API-yhdyskäytävien rakentamisessa!
Opi API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway) tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Esikäsittely ja jälkikäsittely suodattimilla” ilmainen?
Kyllä – oppitunnin ”Esikäsittely ja jälkikäsittely suodattimilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssin, päivitä CoddyKit PROhon. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Esikäsittely ja jälkikäsittely suodattimilla”?
Soveltakaa suodattimia toimintoihin, jotka suoritetaan ennen pyynnön saapumista palveluun (pre) ja palvelun vastaamisen jälkeen (post). Harjoittelet API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Esikäsittely ja jälkikäsittely suodattimilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunnilla?
Kyllä. Jokainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Yleiset suodattimet ja GatewayFilterFactory
- Mukautetut pyyntö- ja vastaussuodattimet
- Esikäsittely ja jälkikäsittely suodattimilla
- Hyödylliset sisäänrakennetut GatewayFilterit