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
คุณสมบัติ | Filter | Interceptor |
---|---|---|
ตำแหน่งใช้งาน | ฝั่ง 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