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