Servlet Filter

Merhaba arkadaşlar, bu yazımızda Servlet Filter konusuna değinmiş olacağız.

Servlet Filter nedir?

Öncelikle Servlet Filter’ın bir java classı olduğunu bilmekte fayda var. Filter şu 2 durum için kullanılır;

  1. Request’in kaynaklara erişimini kesmek.
  2. Client’e cevap dönmeden önce response’yi manipüle etmek.

Yani Servlet filter gelen bir istek için preprocessing ve postprocessing görevi görür.

Spesificasyon içerisinde Servlet Filter’ı ne gibi durumlar için kullanmamız önerilmiştir. Eğer bu önerilere uyarsak uygulamamız standartlar dahilinde olmuş olucaktır. Bunlar ;

  • Authentication Filters -> Kimlik Doğrulama
  • Encryption and Decryption Filters -> Şifreleme ve şifre çözme
  • Logging Filter -> Log kaydı tutma
  • Auditing Filter -> Denetim
  • İnput validation -> Giriş Doğrulama
  • Formatting of request body or header before sending it to servlet ->Requesti düzenlemek
  • vs.

Servlet Filter’a yukarıdaki yazılanlara ek olarak şunun için de ihtiyaç duyarız;

Kaynaklarımıza (jsp,servlet,pdf,img,html vs.) erişim için session’ların valid durumunu kullanarak kaynak kullanımını yönetebiliriyoruz. Bu yaklaşımımız gayet basit olmakla beraber artan Servlet ve Jsp sayfalarında gereksiz code yazmamıza da neden olur. Ayrıca değiştirilen bir Session attribute değeri diğer kullanılan yerlerde de değiştirilmesi gerekmektedir. Tam burada Servlet Filter yardımımıza yetişiyor, yazacağımız bir filter ile işimizi kolaylaştırabiliriz.

Servlet ve Jsp için dedik ama HTML yada static diğer sayfalar için de filter kullanabiliyoruz.

servlet-filters-1

 

 

Servlet Filter nasıl kullanılır ?

Filter’ın bir java class’ı olduğunu söylemiştik. Sınıfımız  javax.servlet.Filter interface’sini implement eder. Filter interface’si bize 3 method sağlar.

  • public void doFilter (ServletRequest, ServletResponse, FilterChain) : Kaynaklara herhangi bir zamanda gelen istek için Contaıner tarafından çağrılır.
  • public void init(FilterConfig filterConfig) : Filter load olduğunda çağrılır(Servlet gibi ) .Sadece bir kez çağrılır ve filter initialize edilir.
  • public void destroy() : Sadece bir kez ve filter servis dışı olmadan önce çağrılır.

Filter bir java class’ıdır dedik. Filter deployment descriptor dosyamız(web.xml) içerisine yazılır. Servlet ve Jsp dosyalarımız ile URL Pattern ile eşleştirilir.

Filter şu şekilde web.xml içerisinde belirtilir ;

* Filter’ımızı bu şekilde web.xml de belirttik. <init-param> da ekleyebiliriz.

Örnek uygulama;

Örneğimizi Log tutmak için kullanacağız. Herhangi bir Servlet yada Jsp sayfamıza istek geldiğinde filter ile gelen isteğin IP adresini ve istekte bulunan sayfayı tarih ile beraber loglayacağız.

LogFilter.java (Filter sınıfımız)

  •  Init() methodumuzda Filter için tanımladığımız param’ı okuyarak ekrana yazdırdık.
  • doFilter() bizim asıl methodumuzdur. Önce HttpServletRequest objemizi ServletRequest objesini cast ederek oluşturmaktayız.
    Sonrasında ise IP adresini ve istek yapılan sayfanın url’ini aldık ve tarihle beraber yazdırdık.
  • filterChain.doFilter ile requesti diğer kaynağa yönlendirdik. (Zincir görevi görür)
  • destroy() methodumuzda ise filter’ın service dışı oldugunu belirttik.

web.xml dosyamızdaki filter’a bakalım;

* Filter’ımız filter paketi altındaki LogFilter sınıfı olmakta. Filter’ı eşlerken url-pattern’da Servlet yada Jsp dosyalarımızın adını yazabiliriz yada /* ile tüm dosyalarımız için filter tanımı kullanabiliriz.

* Herhangi bir Servlet ve Jsp sayfasına erişimde consolda şunu görebiliriz;

Screenshot from 2014-10-18 13:10:06

 

 

 

* Bu şekilde hangi IP adresinden ne zaman hangi sayfaya istek geldiğini kolayca loglamış oluyoruz.

* Contaıner’ımızı durdurdugumuzda ise destroy methodumuz çalışacaktır.

Screenshot from 2014-10-18 13:14:50

 

 

 

 

* Yazımız burada sonlanmış bulunmaktadır, iyi günler dilerim

* Mutlu kalın, kodla kalın ve bol bol Çay için.

~ Alican Akkus

2439 Total Views 7 Views Today

  • Mahmut Duman

    çok iyi bir anlatım emeginize saglık

    • Alican Akkuş

      faydalı olduğunu görmek beni çok mutlu etti. 2014 de yazdığım bir yazı, düzeltmeler/eklemeler şuan dahi yapılabilir.

      iyi çalışmalar, Alican.

      • Mahmut Duman

        abicim ben 2.sınıf bilgisayar mühendisligi okuyorum bi web application yaptım.Bu projede vt den kullanıcı giriş yapıp ToDo (yapılacak listesine ) ulasıyor ekleme silme yapıyor .Ben bunu nasıl güvenli hale getirebilirim.Filter 2 sayfa arası nasıl yapabilirim dmn.mhmt@gmail.com adresim mail verirsen videosunuda atabilirim

      • Mahmut Duman

        yardımcı olabilirmisin ?