Spring Boot Dersleri‘ne devam ediyorum.
Bu yazıda Spring Boot projelerinde Interceptor kullanımından bahsedeceğim. Ama öncesinde Interceptor nedir buna bakalım. Sonrasında ise bir uygInnedir ve nasıl kullanıldığına bakacağız. Sonrasında ise bir uygulama örneği yapacağım.
Interceptor Nedir?
Interceptor, Spring MVC paketinde bulunan bir sınıftır. HTTP isteklerinin öncesi, sonrası ve tamamlandıktan sonra yapılması gereken işlemleri bu sınıf aracılığı ile handle edebilmekteyiz.
Interceptor Nasıl Çalışır

Gelen isteklerin endpointe ulaşmadan önce işlenmesini sağlamamıza yarayan bir sınıftır. Bir servlete benzer ve DispatcherServlet ten sonra bulunmaktadır. HTTP isteklerini kontrol etmek için kullanılır. İstek başlamadan önce çağrılır ve HTTP isteği ile ilgili bilgileri içeren HttpServletRequest nesnesini ve HTTP isteği ile ilgili yanıtı döndürecek HttpServletResponse nesnesini alır.
Interceptor Kullanım Amacı
Genellikle kimlik doğrulama, validasyon ve loglama işlemlerinde bu yöntemi kullanmaktayız.
Interceptor Kullanım Yöntemleri
Uygulamamızda Interceptor’u kullanabilmemiz için iki yöntem bulunmaktadır.
- HandleInterceptor arayüzünü implement etmek.
- HandleInterceptorAdapter sınıfını extends ederek kullanmak.
HandlerInterceptor
Uygulamamızda HandlerInterceptor interface’sini implement ederek kullanabiliriz. Bu sınıf org.springframework.web.servlet paketinin altında bulunmaktadır. Override ederek kullanabileceğimiz metodlar nelerdir bunlara bakalım.
preHandle()
Bu method, kullanıcıdan gelen istek endpointe gönderilmeden önce çalışır. Method boolean değer döndürür. true değeri isteğin devam etmesini sağlar. false değeri ise isteği keser ve işlem devam etmez.
postHandle()
Bu method, client’e yanıt gönderilmeden önce işlemleri gerçekleştirmek için kullanılır ve sonrasında istemciye yanıt gönderilir.
afterCompletion()
Bu method, tüm request ve respond işlemleri tamamlandıktan sonraki işlemler için kullanılır.
Spring Boot Interceptor Uygulama Örneği
Spring Boot Interceptor uygulamasında bir loglama işlemi gerçekleştireceğiz. Bu loglama aşamaları bizim oluşturacağımız rest api’ya gelmeden, geldikten sonra ve işlem tamamlandıktan sonra loglama işlemini gerçekleştireceğiz. Yukarıda açıkladığım Interceptor arayüzünü kendi sınfımıza implement edeceğiz.
Maven bağımlılığımız aşağıdaki gibi olacaktır.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>Code language: HTML, XML (xml)
LoggingInterceptor sınıfımızı oluşturalım.
@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");
}
}
Code language: Java (java)
HandlerInterceptor interface’sini implement ederek preHandle, postHandle ve afterCompletion methodlarını Override ederek içerisine loglarımızı girdik. Rest api’mizde bu döngülerin öncesi, sonrası ve tamamlandıktan sonra çalışacak loglarımızı yazdık. Bu methodlara gelen HttpServletRequest ve HttpServletResponse değerlerini alarak da özelleştirebiliyoruz.
WebConfig sınıfımızı oluşturalım ve bu sınıf WebMvcConfigurer sınıfını implement ederek yazdığımız LoggingInterceptor sınıfını InterceptorRegistry kaydederek IOC yaparak çalışmasını sağlamış olacağız.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggingInterceptor());
}
}
Code language: Java (java)
Şimdi bir Controller sınıfı oluşturalım ve bu bir RestController olacak ve cevap olarak sadece “Hello World” yazacağız.
@RestController
public class HelloWorldController {
Logger LOG = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/")
public String executeLogger() {
LOG.info("Inside Controller");
return "Hello World";
}
}
Code language: Java (java)
Şimdi projemizi çalıştıralım ve sonuca bakalım.
Hello World
Cevap olarak gördük ve şimdi uygulamamızın loglarına bakalım.
INFO -interceptor.LoggingInterceptor : Before Handler execution
INFO -controller.HelloWorldController : Inside Controller
INFO -interceptor.LoggingInterceptor : Handler execution is complete
INFO -interceptor.LoggingInterceptor : Request is completeCode language: CSS (css)
Leave a Reply