Spring Boot’ta Interceptor Nedir ve Nasıl Kullanılır?

Giriş: Spring Boot Interceptor Neden Önemlidir?

Herkese merhabalar! Bu yazıda Spring Boot Interceptor kavramını, Java Spring Boot uygulamalarında HTTP isteklerini yakalama ve loglama süreçlerinde nasıl kullanıldığını detaylı bir şekilde anlatacağım.

Web uygulamalarında HTTP request/response yönetimi, loglama, kimlik doğrulama (authentication) ve validasyon gibi işlemleri merkezi olarak yönetmek için Interceptor’lar kritik bir rol oynar.

interceptor ekranı

Interceptor Nedir?

Interceptor, Spring MVC çatısında yer alan ve DispatcherServlet’ten sonra devreye giren özel bir bileşendir. Bir Servlet Filter gibi davranır, ancak filtrelerden farklı olarak Spring MVC’nin request lifecycle aşamalarına daha iyi entegre olur.

Spring Boot HTTP interceptor, gelen istekler Controller endpoint’ine ulaşmadan önce araya girer ve:

  • İstek üzerinde ön işlemler (pre-processing) yapar,
  • Header ekleme, kaldırma veya dönüştürme görevlerini üstlenir,
  • Loglama ve kimlik doğrulama işlemlerini yürütür,
  • Yanıt gönderilmeden önce ve işlem tamamlandıktan sonra da devreye girer.

Interceptor’ın Çalışma Mantığı

Bir Spring Boot Interceptor üç önemli aşamada çalışır:

  1. preHandle() – Controller’a ulaşmadan önce çağrılır, istek burada yakalanır.
  2. postHandle() – Controller çalıştıktan, ancak yanıt istemciye gitmeden önce çağrılır.
  3. afterCompletion() – Tüm işlem tamamlandıktan sonra çağrılır (ör. loglama için idealdir).

HTTP Yanıt Kodları ve Interceptor İlişkisi

Interceptor’lar çoğunlukla HTTP status code’ları kontrol etmek için de kullanılır.

  • 2xx (Başarılı): İstek başarıyla tamamlandı.
    • 200 OK – İstek başarıyla işlendi.
    • 201 Created – Yeni bir kaynak oluşturuldu.
  • 4xx (İstemci Hatası): Kullanıcıdan kaynaklı hata veya yetkisiz erişim.
    • 400 Bad Request – Hatalı istek.
    • 401 Unauthorized – Kimlik doğrulama gerekiyor.
    • 404 Not Found – Kaynak bulunamadı.

Spring Boot Interceptor Kullanım Amaçları

  • Loglama ve hata yönetimi
  • Kimlik doğrulama (authentication) ve yetkilendirme (authorization)
  • Request header ekleme, kaldırma, dönüştürme
  • Güvenlik politikalarının uygulanması
  • Performans ölçümü (istek süreleri)

HandlerInterceptor Arayüzü

Spring Boot’ta Interceptor oluşturmak için HandlerInterceptor arayüzünü implement etmeniz gerekir. Bu arayüz, request lifecycle’ın farklı aşamalarında devreye giren preHandle, postHandle ve afterCompletion metodlarını içerir.

Spring Boot’ta Interceptor Örneği (LoggingInterceptor)

1. Maven Bağımlılığı Ekleme

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
      

2. LoggingInterceptor Sınıfı

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class LoggingInterceptor implements HandlerInterceptor {
    private static final Logger LOG = LoggerFactory.getLogger(LoggingInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) {
        LOG.info("Before Handler execution");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) {
        LOG.info("Handler execution is complete");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) {
        LOG.info("Request is complete");
    }
}
      

3. WebConfig ile Interceptor Kaydı

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggingInterceptor());
    }
}
      

4. Test Controller

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {
    Logger log = LoggerFactory.getLogger(this.getClass());

    @GetMapping("/hello")
    public String hello() {
        log.info("Inside Controller");
        return "Hello World!";
    }
}
      

5. Çıktılar

INFO - interceptor.LoggingInterceptor  : Before Handler execution
INFO - controller.HelloWorldController : Inside Controller
INFO - interceptor.LoggingInterceptor  : Handler execution is complete
INFO - interceptor.LoggingInterceptor  : Request is complete
      
interceptor code

Sonuç: Spring Boot Interceptor ile Daha Güçlü Uygulamalar

Bu yazıda Spring Boot Interceptor nedir, nasıl kullanılır ve Java Spring Boot loglama interceptor örneği ile temel uygulamayı öğrendiniz.

Özetle:

  • HandlerInterceptor sayesinde HTTP isteklerini kontrol edebilir, loglayabilir ve güvenlik politikalarını uygulayabilirsiniz.
  • Kimlik doğrulama interceptor kullanarak API’lerinizi güvence altına alabilirsiniz.
  • Performans ve loglama için Interceptor’lar, Spring Boot projelerinde olmazsa olmazdır.

Daha fazla teknik makale için: Hashnode | Medium | Latest Software Developers

Beğendiysen bir çay ısmarlayabilirsin ☕

Bana çay ısmarla

Spring Boot ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *