02 Kasım 2008
Türksel Çeker :)
Yansımalar - Ağıt Nota
17 Ekim 2008
Yansımalar Yakamoz Nota
Sevgili Birol YAYLA'nın çok sevdiğim eserlerinden biri Yakamoz. Son yıllarda tanıdığım en önemli bestekârlardan birisi Birol YAYLA. A.Şenol FİLİZ ile muhteşem bir ikili oluyorlar. Grupları Yansımalar kendi tarzında yoluna devam eden yegane gruplardan bir tanesi. Son albümleri olan Gölgesiz Aydınlık'ın piyasaya çıkacağı günü sabırsızlıkla bekliyorum.
18 Eylül 2008
JAR içinden animated gif nasıl okunur?
// İlk önce class loader nesnesi alınır
ClassLoader cl = this.getClass().getClassLoader();
// okunacak animated gif resource olarak okunur
InputStream is = cl.getResourceAsStream("images/animatedpic.gif");
// resim byte olarak okunacağı için bir ByteArrayOutputStream nesnesi oluşturulur
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// -1 okuyana kadar resource'dan byte byte okunur ve output stream'e yazılır.
int r = 0;
while ((r = is.read()) != -1)
baos.write(r);
// Son olarak output stream byte dizisine dönüştürülür ve Image nesnesi oluşturulur.
Image image = Toolkit.getDefaultToolkit().createImage(baos.toByteArray());
// Bu image nesnesini de istediğiniz yerde kullanabilirsiniz.
JLabel label = new JLabel();
label.setIcon(new ImageIcon(image));
08 Eylül 2008
İpek Yolu
"İpek Yolu" parçasını duymayanınız yoktur. Eğer duymadıysanız buyrun. Bu parça aslında Kitaro grubuna ait bir parçadır. Detaylı bilgi için buyrun. İşin garip yanı ben bu parçayı Kitaro'dan dinlemedim, Kervansaray grubunun 1. albümünde yer alıyordu ve NEY ile icra edilmişti, çok hoşuma gitmişti ilk dinlediğimde. Ben burada bu parçanın hocam Serpil CEYLAN tarafından tashih edilen notasını koymak istiyorum. İnternetteki arayışlarıma rağmen pek net bir sonuca ulaşamadım bu konuda. Umarım benim gibi bu parçanın notalarını arayanlara yardımcı olur:
29 Ağustos 2008
NEY ve Yansımalar Sonbahar Nota
02 Haziran 2008
Aynı Makinede İki Tane JBOSS Çalıştırılması
Aynı makinede iki adet JBOSS aynı anda çalıştırılabilir. Bunun için JBOSS’ta yeni bir konfigurasyon tanımlanması gerekmektedir. Bilindiği gibi JBOSS ilk kurulup çalıştırıldığında çalışan konfigürasyon “default” konfigürasyonudur. Konfigürasyonlar
JBOSS ilk kurulduğunda gelen konfigürasyonlar “all”, “default” ve “minimal” konfigürasyonlarıdır. Burada biz kendimiz yeni bir konfigürasyon oluşturup aynı anda “default” ve bizim oluşturduğumuz konfigürasyonu deneyeceğiz.
Öncelikle “default” klasörü farklı bir isimde server dizinin altına kopyalanır, örn: “myconfig”. Daha sonra myconfig/conf dizini altındaki jboss-service.xml dosyası bir editörde açılır. Bu dosyada Service Binding kısmı bulunur. Burada amaç “myconfig” konfigürasyonunun çalışacağı portları belirlemektir. Aksi takdirde “default” konfigürasyonu ile çakışır. “default” konfigürasyonu kopyaladığımız için burası comment edilmiştir. Buradaki comment kaldırılır ve aşağıdaki gibi görüntü oluşur:
Şimdi sıra geldi çalıştırmaya. Çalıştırmak için
10 Şubat 2008
JBoss için Login Module Tanımlanması ve Rol Bazlı EJB Güvenliği
Yazacağınız login module JBoss'un sunduğu AbstractServerLoginModule abstract sınıfını extend etmelidir. Bu linkte kaynak kodunu görebilirsiniz (Ayrıca bu sınıfı kullanan JBoss login modülleri olan UsernanePasswordLoginModule ve DatabaseServerLoginModule sınıflarının kodları da incelenmesi gerekmektedir). Bu nedenle yazacağınız kod getRoleSets() ve getIdentity() metodlarını override etmelidir. Tabi bunlarla kalmamak lazım. Bir de login işlemini gerçekleştiren login() metodu var. Bu metod bu sınıfta implemente edilmiş ama biz kendimize uygun bir login modül oluşturacağımız için bu metodu da override etmemiz gerekir. Ayrıca login module ilklendirilirken kullandığınız seçenekler var ise initialize() metodunu da override etmek gerekir. Genel olarak sınıf aşağıdaki gibi olacaktır:
package com.ornek;
public class MyLoginModule extends AbstractServerLoginModule {
...
/*
burada options parametresi login modül'e verilen optionları barındırır, callbackHandler giriş bilgilerini barındırır, subject de rol bilgilerini tutar.
*/
public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) {
...
}
/*
login işlemi burada gerçekleştirilir. işlem başarılı ise mutlaka süper sınıfta tanımlanmış loginOk değişkeni true değerine atanmalıdır. Aksi takdirde süper sınıftaki commit metodu çalışmaz.
*/
public boolean login() throws LoginException {
}
...
super.loginOk = true;
...
}
/*
Login olan kullanıcının role gruplarını oluşturan bir metoddur ve override edilmesi gerekir. Bu metod override edildiğinde kullanıcının role bilgilerini barındıran en azından “Roles” adında bir Group oluşturulmalıdır.
*/
protected Group[] getRoleSets() throws LoginException {
...
}
/*
Kullanıcının birincil giriş bilgisini içeren Principal nesnesini döndürür.
Bu metod genelde login metodu içinde oluşturulan Principal nesnesini döndürür.
*/
protected Principal getIdentity() {
...
}
Kendi modülünüzü yazdıktan sonra bunun Jboss’a tanıtılması gerekmektedir. Bunun için login module sınıfınızı jar haline getirin ve Jboss deploy kütüphanelerini (
Görüldüğü üzere kendi yazacağınız login module sınıfında yukarıdaki üç metodu override etmeniz yeterli olacaktır. login metodu düzgün olarak çalıştığında ve super.loginOk = true ise süper sınıf kendi içindeki commit metodunu çalıştıracak ve kullanıcının rol bilgilerini oluşturan getRoleSets metodunu çağıracak. Bütün işlemler bittiğinde kullanıcıya ait giriş ve rol bilgilerini barındıran bir Subject nesnesi oluşturulacak. Bu nesne ejb metodları çağırılırken çağıranın rol bilgilerinin kontrolü için kullanılacak. Örnek:
@Remote
public interface MyEJB {
public void myMethod();
}
@SecurityDomain(“MyLoginModule”)
@Stateless
public MyEJBImpl implements MyEJB {
@RolesAllowed(“MyRoleName”)
public void myMethod() {
...
}
}
Yukarıdaki örnekte EJB metodları çalıştırılmadan önce MyLoginModule ismindeki login modülün çalıştırılacağı ve kullanıcının girişinin gerçekleştirileceği SecurityDomain annotation’ı ile belirtilmiştir. SecurityDomain annotation’ı içine vereceğiniz login module ismi login-config.xml dosyasında tanımlı olmalıdır. Kullanıcı girişi gerçekleştirildiğinde istenilen ejb metodu çağırılır aksi takdirde hata verilir.
Bir EJB metodu olan myMethod’a sadece MyRoleName rolundeki kullanıcıların erişebileceği @RolesAllowed annotation’ı ile gösterilmiştir. Bu annotation içine birden fazla rol yazabilirsiniz @RolesAllowed(“Role1”, “Role2”, ...) şeklinde. İşte bu annotation içindeki rol bilgileri login module tarafında oluşturulan Subject nesnesinin içindeki rol bilgisiyle karşılaştırılır. Eğer Subject nesnesi bu rollerden birisini barındırıyorsa metod çalıştırılır. Aksi takdirde çalıştırılmaz.
07 Ocak 2008
Java Authentication and Authorization Service (JAAS) ve EJB Güvenliği
JAAS'ı herhangi bir güvenlik sisteminde kullanabilirsiniz. Örneğin; bir uygulama sunucusu kimlik doğrulamayı bir dosyadan okuyarak yapıyor olabilir yada bir veritabanından sorgulatarak ya da bir LDAP sunucusuna bağlanarak yapıyor olabilir. JAAS ile bu ortamlara ayak uydurmak hiç dert değil. Çünkü JAAS interface'lerden oluşur ve siz de bu interface'leri implemente edersiniz. Böylece kimse kimseye darılmaz.
JAAS EJB güvenliğinde sıklıkla kullanılır. Sun, JAAS'ı EJB güvenliğinde standard olarak kullanmaktadır.
Genelde JAAS modüllerinin kullanımı ile ilgili iki tip senaryo vardır:
- Bir masaüstü uygulamanız vardır ve bu uygulamanız uzak bir uygulama sunucusuna bağlanıp sisteme giriş yapacaktır. Sisteme giriş sağlandıktan sonra da kullanıcının yetkileri oluşturulup bu yetkilerine göre sistemde hangi modüllere erişip hangi modüllere erişemeyeceği belirlenecektir. Bunun için masaüstü uygulamanız JAAS ile kullanıcının giriş bilgilerini uygulama sunucusuna iletir. Uygulama sunucusu da bu bilgileri kullanarak sisteme girişi gerçekleştirip kullanıcının rollerini oluşturur. Bundan sonraki EJB metodlarının çağırılmasında kullanıcının rol bilgilerine bakılır. Eğer yetkisi varsa izin verilir yoksa izin verilmez.
- Bir web tarayıcı aracılığı ile sisteme giriş yapabilirsiniz. Burada da kullanıcının giriş bilgileri JSP/servlet'e aktarılır. JSP/Servlet'de bu bilgileri kullanarak sisteme girişi gerçekleştirir. Tarayıcı giriş bilgilerini aşağıdaki yöntemleri kullanarak aktarır:
- Basic authentication
- Form-based authentication
- Digest authentication
- Certificate authentication
JAAS'ın çalışma mantığına bakacak olursak aşağıdaki maddeler çıkabilir:
- İstemci yeni bir LoginContext nesnesi oluşturur. Bu sınıf JAAS tarafından sunulmuştur ve kimlik doğrulama (authentciation) sürecinden sorumludur.
- LoginContext nesnesi bir Configuration nesnesi alır. Bu nesnede kimlik doğrulama işleminin hangi LoginModule'ler ile yapılacağı bildirilir. Örneğin bir sistem sadece kullanıcı adı ve şifre doğrulaması istersen başka bir sistem hem kullanıcı adı-şifre hem de sertifika bazlı doğrulama isteyebilir.
- LoginContext Configuration nesnesine kimlik doğrulama mekanizmalarının neler olduğunu sorar.
- Configuration nesnesi kimlik doğrulama mekanizmalarından oluşan mekanizmalardan oluşan bir liste döndürür. Bu mekanizmaların her birine login module denmektedir. Login Module JAAS'ın sunduğu bir interface'dir. LoginModule kimlik doğrulama işleminin yapıldığı birimlerdir.
- LoginContext LoginModule sınıflarından birer nesne oluşturur.
- LoginContext oluşturulan LoginModule nesnelerini ilklendirir.
- İstemci kodu LoginContext nesnesi üzerinden login() metodunu çağırır.
- LoginContext login işlemlerini LoginModule nesnelerine devreder. Çünkü kimlik doğrulama işlemlerinin nasıl yapılacağını bu modüller bilmektedir.
- Sizin tarafınızdan yazılmış LoginModule nesneleri kimlik doğrulama işlemini gerçekleştirir.
- İşlem sonucu oluşturulan bilgiler Subject sınıfından oluşturulmuş bir nesnenin içinde saklanır. Bu nesneyi güvenli işlemler gerçekleştirmek için kullanırsınız.
- Bundan sonra istemci kodu EJB metodlarını çağırır ve sistem giriş bilgisi bu metod çağırımlarında otomatik olarak iletilir. Böylece uygulama sunucusu bu bilgileri kullanarak kimlik doğrulama ve yetkilendirme işlemlerini yapar.
Bu yazıda JAAS yüzeysel olarak incelenmiştir. Detaylı bilgi için lütfen bkz. JAAS Reference Guide
JAAS Java SE ile birlikte gelmektedir. Böylelikle ayrı bir jar indirmenize gerek yoktur.
Bir sonraki yazıda JAAS kullanarak bir JBOSS uygulama sunucusundaki EJB'lere güvenli erişmeyi sağlayan bir örnek anlatılacaktır.
Kaynak: Mastering Enterprise Java Beans 3.0