Ana içeriğe atla

JSF Oturum Kontrolü

Bir web sitesi tasarlarken, bazı sayfalar için oturum açılması koşulunu koyarız. Örneğin yönetim paneline giriş yapmak isteyen bir kullanıcı sistemde oturum açmamışsa, bu kullanıcıyı oturum açma sayfasına yönlendirmeliyiz. Eğer oturum açmışsa devam etmesini sağlamalıyız.

Peki bunu JSF'de nasıl yapabiliriz? Yani kullanıcının girmeye çalıştığı bir sayfayı kontrol edip, eğer uygun şartları sağlıyorsa istediği sayfaya göndermeyi nasıl yapabiliriz?
JSF içerisinde bu gibi durumlar için kullanılan yardımcı bir sistem var, filtering. Bu sistemde JSF'ye hangi sayfalara giriş yapılırken, sizin belirttiğiniz Java dosyasının çalışması gerektiğini söylüyorsunuz, JSF de kullanıcı bu sayfalara giriş yapmaya kalktığında sizin bu Java dosyanızı çalıştırıyor, yani bir nevi bu isteği sizin değerlendirmenize sunuyor. Bu değerlendirmeyi yapacağımız  Java sınıfının bazı özellikleri olmalıdır.

İlk olarak isteği işleyeceğimiz sınıfta, Filter interface'ini implements etmeliyiz. Daha sonra, implements ile gelen 3 metoddan birisi olan doFilter() metodunun içini doldurmalıyız. Çünkü kullanıcı bizim kontrol ettiğimiz sayfaya giriş yapınca JSF bizim sınıfımızı ve doFilter() metodunu çalıştıracaktır. Biz de kontrol etmemiz gereken şeyleri kontrol ettikten sonra gerekli yönlendirmeleri yapacağız. İsteği işlemek için gerekli sınıf yapısını tanımladıktan sonra web.xml dosyasının içerisine sınıfımızı ve kuralımızı kaydetmeliyiz. Şimdi bir örnek üzerinden giderek anlattığım şeyleri uygulayalım.

Elimizde 2 sayfa olsun. Bunlardan birisi login sayfası, diğeri ise admin sayfası ve admin sayfasına giriş yapabilmek için oturum açılması gereksin. Kullanıcı admin sayfasına giriş yapmaya kalktığında(admin.xhtml adresini tarayıcıda girmeye kalktığında), herhangi bir oturum açılıp açılmadığını kontrol edelim. Eğer oturum açılmışsa admin.xhtml sayfasına yönlendirelim, yok eğer açılmamışsa login.xhtml sayfasına yönlendirelim. İlk olarak gerekli sınıf yapılarımızı tanımlayalım. Bir sınıfımız oturum bilgilerini tutan bean sınıfı olacaktır.Bu bean sınıfı @SessionScoped olmalıdır, çünkü oturum bilgileri kullanıcı sistemde olduğu sürece depolanmalıdır.



Bu bean sınıfı basit bir şekilde kullanıcı adı, şifre ve giriş yapılıp yapılmadığını tutan bir yapıda. Basit olarak yaptım çünkü burada amacım mantığı anlatmak. Siz istediğiniz şekilde doldurabilirsiniz tabi. Şimdi istek geldiği zaman,isteği işleyecek olan sınıfımızı tanımlayalım.




Kullanıcı admin.xhtml sayfasına giriş yapmaya çalıştığında önce bizim LoginFilter sınıfımızın doFilter() metodu çalıştırılacaktır JSF tarafından. Biz de burada öncelikle kullanıcı bilgilerini sakladığımız bean dosyasına erişmeliyiz, çünkü oturum bilgisini bu bean içerisinde saklamıştık. Ve daha sonra, bu kullanıcının bilgilerinin saklandığı bean yardımıyla giriş yapıp yapmadığını kontrol ediyoruz. Eğer giriş yapılmamış ise, response nesnesinin sendRedirect() metodu yardımıyla kullanıcıyı giriş sayfasına yönlendiriyoruz. Buraya kadar herşey iyi. Ancak bu kuralların çalışması için bunu JSF 'ye bildirmemiz gerekir. Bunu da web.xml dosyasında bildiriyoruz. web.xml dosyası WEB-INF klasörünün altındadır. İçerisine yazmamız gereken kural şu şekilde olmalı



Şimdi burada dikkat etmemiz gereken şey, < filter> ve < filter-mapping> altında bulunan < filter-name> kısımlarının aynı olması. < filter-mapping> hangi url sorguları için kuralın çalışması gerektiğini söylerken, < filter> ise kural sonucu çalıştırılacak olan sınıfın domainini belirtir. Ben isteği işleyeceğim sınıfımı org.example.LoginFilter altında tuttuğum için o şekilde yazdım. Siz hangi paket yapısı altında tutuyorsanız onu yazmalısınız. Gördüğünüz gibi biraz karmaşık olsa da, aslında altında yatan mantık basit. URL adreslerini filtreliyorsunuz ve filtreye uymayanları ayıklıyorsunuz. Bir hata varsa bildirmek için ya da sorularınız varsa sormak için yorum yapabilirsiniz. Bir başka yazıda buluşmak dileğiyle...

Yorumlar

Bu blogdaki popüler yayınlar

Python Soket Programlama

Merhaba arkadaşlar. Bugün sizlerle birlikte Python'da socket programlama yapacağız. Bunun için Python da socket kütüphanesini kullanacağız. Peki nedir bu socket programlama? Soket programlama, sizin iki program arası yada iki bilgisayar arası iletişim kurmanızı sağlar. İşte bizde bugün iki programımızı birbiri ile haberleştireceğiz. Bunun için elimizde iki program olacak. Birinci program,mesaj bekleyen program olacak, diğeri ise mesaj gönderen program.

Infix to postfix dönüşümü

Infix to postfix dönüşümü, operatorün ortada olduğu a+b yazım şeklini operatorün sonda olduğu ab+ yazım şekline dönüştürme işlemidir.  Infix gösterimi, bizler için kolay bir gösterim olsa da makineler için öyle değildir. İfadeyi soldan sağa doğru okurken a + b * c işleminde önce b ile c yi çarpıp sonra da a ile toplamayı kolay bir şekilde yapabiliriz çünkü bizim ifadeyi sıra ile soldan sağa adım adım giderek okuma zorunluluğumuz yok. Önce b*c nin öncelikle olduğunu görerek oradan başlar, sonra a ile kolayca toplarız.

Python Subprocess

subprocess modülü, yeni bir process oluşturmayı sağlayan, bunların girdi-çıktılarını ele alma imkânı veren ve dönüş kodlarını almayı sağlayan bir modüldür. Yani daha basit bir şekilde, program içinde program çalıştırmaya imkan veren bir modüldür. Subprocess Modülünün Kullanımı subprocess basit bazı process'leri kullanmak için birkaç tane fonksiyon sunuyor. Daha karmaşık bir process çalıştırmak isterseniz, Popen sınıfını kullanabilirsiniz. Bunlara detaylı bir şekilde değinmeye çalışacağız. Şimdi basit fonksiyonları inceleyelim