การใช้งาน Filter และ Interceptor ใน WebFlux

Sharing is caring!

Spring WebFlux เป็น framework ที่รองรับ reactive programming อย่างเต็มรูปแบบ ซึ่งแน่นอนว่าในระบบจริง เราจำเป็นต้องมีการจัดการ request/response ที่เข้ามา เช่น การ log, ตรวจสอบ token, แทรก header หรือจัดการ flow ต่าง ๆ — ทั้งหมดนี้สามารถทำได้ด้วย Filter และ Interceptor

🔍 Filter คืออะไร?

Filter ใน WebFlux ทำงานอยู่ในฝั่ง Server โดยจะ intercept request ที่เข้ามาและ response ที่จะส่งกลับ เหมาะสำหรับ use-case อย่างเช่น logging, การ auth เบื้องต้น หรือการปรับเปลี่ยน request/response

📄 ตัวอย่างการเขียน GlobalFilter

@Component
public class LoggingFilter implements GlobalFilter {
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    System.out.println("Request: " + exchange.getRequest().getURI());
    return chain.filter(exchange)
      .doOnSuccess(aVoid -> System.out.println("Status: " + exchange.getResponse().getStatusCode()));
  }
}

🌐 Interceptor คืออะไร?

Interceptor ใน Spring WebFlux ใช้ร่วมกับ WebClient ฝั่ง client เพื่อ intercept หรือปรับแต่ง request ก่อนส่งออกไปยังปลายทาง เช่น เพิ่ม header, timeout หรือ log การเรียก API ภายนอก

📄 ตัวอย่าง Interceptor บน WebClient

WebClient webClient = WebClient.builder()
  .filter((request, next) -> {
    ClientRequest newRequest = ClientRequest.from(request)
        .header("X-Custom-Header", "my-value")
        .build();
    return next.exchange(newRequest);
  })
  .baseUrl("https://api.example.com")
  .build();

📊 เปรียบเทียบ Filter กับ Interceptor

คุณสมบัติFilterInterceptor
ตำแหน่งใช้งานฝั่ง Serverฝั่ง Client (WebClient)
ลักษณะการทำงานก่อน/หลัง Routingก่อนส่ง Request
รองรับ Reactive

🖼️ ภาพประกอบ Flow

💡 สรุป

  • Filter เหมาะกับ logic ฝั่ง Server ที่เกี่ยวข้องกับ request/response ทั้งระบบ
  • Interceptor ใช้กับ WebClient เพื่อจัดการ request ก่อนส่งออก
  • ทั้งสองอย่างสามารถเขียนแบบ non-blocking ได้เต็มรูปแบบ

🔎 คำค้น SEO

spring webflux filter, spring globalfilter example, webflux interceptor example, spring boot reactive filter, webclient request filter, reactive request interceptor, spring cloud gateway filter, webflux logging request

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *