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...
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
Yorum Gönder