JSF

JSF Dersleri-Filtre (Filter) İle Oturum Yönetimi

Merhaba arkadaşlar. Oturum yönetimi konusuna daha önce Apacahe Shiro yazıları ile değinmiştik. Buradan ve buradan o yazılara ulaşabilirsiniz. Bu yazıda ise Servlet taraflı bir iş yapacağız ve Filtre (Filter) vasıtası ile oturum yönetimine değineceğiz.

Bu yazıyı yazmak için yararlandığım kaynağa buradan erişebilirsiniz. Şimdi uygulamayı inceleyelim. İlk olarak xhtml sayfalarına değinelim.

Uygulama 3 xhtml sayfası var. Birisi herkesin ulaşabildiği info sayfası. Bir diğeri login sayfası. Sonuncu sayfa ise secure dizini altında yer alan ve yetkili kişilerin erişebildiği welcome sayfası. Bu 3 sayfada kodlama olarak anlatılacak bir yer yok arkadaşlar. Hepsi daha önce yazdığım şeyler. Şimdi Java sınıflarımıza bakalım. 

LoginBean.java

LoginBean sınıfımız içinde oturum açılıp açılmadığını tutan bir boolean değişken ve kullanıcı adını,şifreyi tutan değişkenler yer alıyor. Kod içerisinde göreceğiniz üzere @ManagedProperty notasyonu mevcut. Bu notasyondan biraz bahsetmek istiyorum arkadaşlar.

Bu notasyon managed bean’ler arası bağımlılık enjektesi için kullanılan bir notasyondur. Normal zamanda bir sınıf içinde başka bir sınıfın değişkenlerini ve mtotlarını kullanmak istediğimizde kullanmak istediğimiz sınıfa ait nesne oluşturmak zorundayız. Hatta bu durum aynı sınıfta main metot içinden başka bir metot ya da değişken çağırdığımızda da geçerlidir. @ManagedProperty notasyonu ile bu nesne oluşturma işlemine gerek kalmaz ve biz managed bean içinde başka bir managed bean’in özelliklerini kullanabiliriz.

doLogin metodu içinde xhtml sayfasından gelen isim ve parolanın bizde olup olmadığı kontrol ediliyor ve varsa welcome sayfasına yönlendiriliyoruz. Yoksa bir hata mesajı verdiriyoruz.

doLogout metodunda da loggedIn değişkenine false değer atayıp login sayfasına yönlendiriyoruz.

LoginFilter.java

Yazının başında dediğim gibi Servlet taraflı bir iş yapıyoruz ve bu uygulamada bu işi LoginFilter sınıfı yapıyor. Buradaki doFilter metodu bir LoginBean nesnesini session özelliğinden cast işlemi ile alıyor. Eğer birisi daha önce girmişse o kişi için bir loginBean hazır tutlur fakat oturumu kapalı olduğu zamanlarda loggedIn değeri false yapılır, girdiği zaman dilimi içinde true yapılır. Girmemiş ise zaten loginBean null olacağı için oturum açılmaz. Eğer şartlar tamam olursa chain.doFilter() metodu ile gelen istek işlenir ve işlem tamamlanır. Diğer 2 metot bu uygulama için bir önem arzetmiyor.

NavigationBean sınıfı içinde sadece yönlendirme metotları olduğu için değinmemiz gereken bir nokta yok arkadaşlar.

Son olarak web.xml‘e değinmemiz gerekiyor.

Web.Xml

LoginFilter sınıfımızın uygulama ile birlikte çalışması ve Servlet taraflı bir iş yapması sebebi ile onu web.xml’e tanıtmamız gerekiyor. Bu tanıtma işlemlerini <filter></filter> ve <filter-mapping></filter-mapping> ile yapıyoruz. Dikkat etmemiz gereken nokta <filter-name></filter-name> etiketleri arasındaki kısmın hem filter hem de filter-mapping için aynı olması zorunluluğudur. <filter-class></filter-class> etiketi Filtre sınıfının adını (varsa paket yolu ile birlikte) veriyoruz. <url-pattern></url-pattern> ile de hangi url üstünde çalışacağını bildiriyoruz.

Yaznının başlarında verdiğim kaynakta olmayıp bu kodda olan bir kısım mevcut o da session-config bölümü. Bu bölüm ile oturumun süresini 1 dakika olarak belirledik. 1 dakika sonra sayfayı yenilediğinizde tekrar sizden kullanıcı adı şifre isteyecektir.

Ekran Çıktıları

Saat 14:24’de sayfaya giriş yaptım.

Screen Shot 2015-02-17 at 14.23.46

 

 

 

 

Saat 14:26’da sayfayı yenilediğimde oturumun sonlanmış olduğunu görüyor ve login sayfasına yönlendiriliyorum.

Screen Shot 2015-02-17 at 14.25.48

 

 

 

 

Bu yazıda da bu kadar arkadaşlar. Filter ile oturum yönetimini bu şekilde yapıyoruz. Başka bir yazıda görüşmek üzere esen kalın.