Filter & Interceptor Dasar
Penjelasan
Spring Boot punya dua level "middleware": Filter (bagian dari spesifikasi Servlet Java, berjalan SEBELUM masuk ke Spring MVC sama sekali, cocok untuk hal generik seperti logging/CORS) dan HandlerInterceptor (level Spring MVC, punya akses ke informasi handler yang akan dipanggil, cocok untuk otorisasi berbasis anotasi Controller).
Contoh Konsep
@Component
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
System.out.println(req.getMethod() + " " + req.getRequestURI());
chain.doFilter(request, response); // WAJIB, lanjut ke filter/handler berikutnya
}
}
Praktikum
Buat @Component CekJamKerjaFilter implements Filter yang menolak akses (status 403) kalau jam sekarang (LocalTime.now().getHour()) di luar rentang 8-17, dan memanggil chain.doFilter() kalau masih dalam jam kerja.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Lupa memanggil chain.doFilter() membuat REQUEST MENGGANTUNG SELAMANYA, sama persis konsekuensinya dengan lupa next() di Express.js atau await next() di ASP.NET Core — pola "WAJIB memanggil fungsi lanjutan" ini universal di hampir semua sistem middleware/filter, bukan spesifik Spring Boot.