JSF

JSF Dersleri-Apache Shiro’yu Veri Tabanı İle İlişkilendirme

Merhabalar. Bu yazıda Apache Shiro’nun veri tabanı ile nasıl ilişkilendirileceğini göreceğiz. Kullandığımız uygulamaya ait dosyayı buradan indirebilirsiniz. Bu uygulamayı öğrenmemi sağlayan Hüseyin Akdoğan’a buradan teşekkür ederim. Apache Shiro kullanarak sayfalara yetkilendirme işlemi yapmak istediğimizde tabii ki hepimiz veri tabanı kullanmak isteriz. Bunun için de JDBC Realm kullanırız. Kullanacağımız sınıf org.apache.shiro.realm.jdbc.JdbcRealm‘dir. Maven projesi açıp Shiro’yu eklediğimizde bu da gelecek zaten. Şimdi uygulamamızı yapalım. Tablolarımız yazarlar ve userroles tabloları. Bu uygulamamızın nasıl çalıştığından bahsedelim. Uygulamada yazarlar tablosundaki ActionID bilgisi alınıyor ve userroles tablosundaki ActionID bilgisine karşılık gelen rol alınıyor. Daha sonra o role uygun sayfaya yönlendiriliyor. 1                         2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Projeyi indirip NetBeans ortamında açtı iseniz şimdi bazı kodları inceleyelim.

Pom.xml İncelemesi

Pom.xml kodları içinde yer alan şu iki depency kodu bizim için Shiro’ya ait jarları indiriyor ve kullanılabilir hale getiriyor.

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>

Ayrıca veri tabanına bağlanmamızı sağlayan mysql connector için dependency kodu ve diğer lazım elzem dependency kodları da pom.xml içerisinde yer alıyor. Asıl konumuz Apache Shiro olduğu için burada onlara değinemiyorum.

Shiro.ini İncelemesi

Yetkilendirme işlemlerinde ana işi yapan dosya olan shiro.ini dosyasının kodları şu şekilde:

[main]
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.authenticationQuery = SELECT password FROM yazarlar where adi = ?
jdbcRealm.userRolesQuery = select role from userroles where ActionID = (select ActionID FROM yazarlar WHERE adi = ?)

ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
ds.serverName = localhost
ds.user = ilkay
ds.password = 12345
ds.databaseName = kod5
jdbcRealm.dataSource= $ds

authc.loginUrl = /login.xhtml
#authc.successUrl = /guest/index.xhtml
user.loginUrl = /login.xhtml


[urls]
/login.xhtml = authc
/logout = logout
/admin/** = user, roles[admin]
/guest/** = user, roles[guest]

Kodda 2 bölüm var. main ve urls bölümleri. Main bölümünde login.xhtml sayfasından gelen isimle şifre ve o ismin rolü çekiliyor.  Nereden çekileceğini ise aşağıda ds‘yi kullandığımız yerde verdiğimiz veri tabanı adından tanıyor. Yine main bölümünde hangi veri tabanı kullanılacağı ve ona dair kullanıcı adı şifre bilgileri tanımlanıyor. Mesela ben veri tabanına giriş yaparken kullanıcı adını ilkay şifreyi de 12345 olarak belirledim ve onu da burada belirttim. ds ile belirtilen bu kısım hangi veri tabanı ve hangi server’ı kullanacağımızı söylediğimizden önemli. Urls bölümünde ise hangi sayfaya hangi roldeki kişinin ulaşabileceği tanımlanıyor. Diğer tüm dosyalar hep daha önce değindiğimiz noktalar. Yine de anlamadığınız yerleri yorum da sormanızı rica ediyorum. Ekran çıktılarına da bakalım. 3                   4                           5                     6               7                       8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Shiro’yu veri tabanı ile de bu şekilde kullanıyoruz. Gelecek yazılarda görüşmek üzere esen kalın.

2 Yorum

Yorum Yap