API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) · บทเรียน

ตัวกรองส่วนกลางและ GatewayFilterFactory

ทำความเข้าใจแนวคิดของตัวกรองส่วนกลางและวิธีใช้ GatewayFilterFactories ที่มีมาให้สำหรับการแปลงข้อมูลทั่วไป

บทเรียน 1 จาก 411 ขั้นตอน

ตัวกรองส่วนกลางและ GatewayFilterFactory เป็นบทเรียน API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

What are Gateway Filters?

In Spring Cloud Gateway, filters are like interceptors that allow you to modify incoming HTTP requests or outgoing HTTP responses.

They provide a powerful way to implement cross-cutting concerns for your API traffic, such as security, logging, or data transformation.

Pre- and Post-Filters

Spring Cloud Gateway supports two main types of filter execution:

  • Pre-filters: Executed before the request is sent to the downstream service. Great for authentication, logging, or modifying request headers.
  • Post-filters: Executed after the response is received from the downstream service but before it's sent back to the client. Useful for modifying responses, caching, or error handling.

Understanding Global Filters

A Global Filter is applied to every single request that passes through the gateway, regardless of the specific route it matches.

This makes them ideal for concerns that affect all your API traffic, like global logging, security checks, or metrics collection across all services.

They implement the GlobalFilter interface.

Building a Custom Global Filter

Let's create a simple global filter that logs the incoming request path. It needs to implement GlobalFilter and Ordered.

Run this Spring Boot app and access http://localhost:8080/test/hello. You'll see the log in the console!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
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.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@SpringBootApplication
public class GatewayApp {

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

    // A simple route for demonstration
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("test_route", r -> r.path("/test/**")
                .uri("http://httpbin.org:80")) // Public test service
            .build();
    }

    @Component
    static class MyLoggingFilter implements GlobalFilter, Ordered {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            System.out.println("Global Filter: Request Path -> " + exchange.getRequest().getPath());
            return chain.filter(exchange); // Continue filter chain
        }

        @Override
        public int getOrder() {
            return -1; // Execute very early
        }
    }
}

Understanding Filter Order

When multiple filters (global or route-specific) are present, their execution order matters.

Filters that implement the Ordered interface define their priority using the getOrder() method. Lower values mean higher priority (executed earlier).

  • Negative values: Very high priority.
  • Positive values: Lower priority.
  • Filters without an explicit order often run later.

What is a GatewayFilterFactory?

While GlobalFilters apply everywhere, a GatewayFilterFactory provides reusable, configurable filters that you can apply to specific routes.

Spring Cloud Gateway comes with many built-in factories for common tasks, like adding/removing headers, rewriting paths, or applying rate limits. You configure them per route.

AddRequestHeader Factory in Action

The AddRequestHeader factory adds a static header to the request before it's forwarded to the backend service.

Run this example and navigate to http://localhost:8080/add-header/test. The response from httpbin.org will show the added header!

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;

@SpringBootApplication
public class GatewayApp {

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

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("add_header_route", r -> r.path("/add-header/**")
                .filters(f -> f.addRequestHeader("X-Gateway-Custom", "CoddyKit"))
                .uri("http://httpbin.org:80/headers")) // Shows request headers
            .build();
    }
}

Exploring More Built-in Factories

Spring Cloud Gateway offers many other powerful GatewayFilterFactory implementations:

  • RemoveRequestHeader: Removes a specified header.
  • RewritePath: Changes the request URI path.
  • Retry: Retries failed requests.
  • RateLimiter: Applies rate limiting to requests.

These factories simplify common gateway tasks without writing custom code.

Global vs. Route-Specific Filters

When should you use a Global Filter versus a GatewayFilterFactory?

  • Choose Global Filters for: Cross-cutting concerns affecting all requests (e.g., global security, logging).
  • Choose GatewayFilterFactory (route-specific) for: Logic specific to certain APIs or groups of routes (e.g., API versioning, specific header manipulation, rate limiting on a particular endpoint).

Global Filter Check

Consider a Spring Cloud Gateway application. Which statement is TRUE about Global Filters?

Global Filters & Factories Recap

We've explored Global Filters, which apply to all requests, and learned how to create a custom one. We also introduced GatewayFilterFactory, which offers reusable, configurable filters for specific routes.

Understanding these filter types and when to use them is crucial for building powerful and flexible API Gateways with Spring Cloud Gateway.

เริ่มต้นได้ฟรี

เรียนรู้ API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
12
บทเรียน
48

คำถามที่พบบ่อย

บทเรียน “ตัวกรองส่วนกลางและ GatewayFilterFactory” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวกรองส่วนกลางและ GatewayFilterFactory” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ให้อัปเกรดเป็น CoddyKit PRO คอร์ส API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวกรองส่วนกลางและ GatewayFilterFactory”

ทำความเข้าใจแนวคิดของตัวกรองส่วนกลางและวิธีใช้ GatewayFilterFactories ที่มีมาให้สำหรับการแปลงข้อมูลทั่วไป คุณปฏิบัติ API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวกรองส่วนกลางและ GatewayFilterFactory” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) นี้ได้ไหม

ได้ บทเรียน API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวกรองส่วนกลางและ GatewayFilterFactory
  2. ตัวกรองคำขอและการตอบกลับแบบกำหนดเอง
  3. การประมวลผลก่อนและหลังด้วยตัวกรอง
  4. GatewayFilters ในตัวที่ควรรู้จัก
← กลับไปที่ API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway)