Menu

31 Mart 2009 Salı

JAZN oracle security

Bu yazimizda oracle`in JAZN security`ini kullanarak bi EE uygulamalrinda admin panelinde nasil kullanacagizi gorecez. Oncelikle bize gerkeli olan class`lari, hangi classlar bizim isimize yarayacak onlara belirleyelim. Bunun icin bizim birtane User ve Role class olmalidir.

public class Role {
protected String name;
public String getName() throws AppSecurityException{
return this.name;
}
public void setName(String name)throws AppSecurityException{
this.name = name;
}
}

public class User {
protected String name;
protected boolean value;

public String getName()throws AppSecurityException{
return this.name;
}
public void setName(String name){
this.name = name;
}
public boolean isLocked() throws AppSecurityException{
return this.value;
}
public void setLocked(boolean value) throws AppSecurityException{
this.value = value;
}
}

Yukarida goruldugu gibi burada bizim icin gerekli olan degiskenler mevcut. Simdi ise sira bir tane abstract class oluturmak olacak, burada interface`de olabilir. ama biz abstract class yaptik. Cunku metodumuzun bitanesinin icini doldurmak istiyoruz.

public abstract class SecurityManager {
public static SecurityManager getInstance(String instanceName) throws AppSecurityException {
if(("jazn").equalsIgnoreCase(instanceName)){
return new SecurityManagerJAZN();
} else{
throw new AppSecurityException("NOT FOUND");
}
}
public abstract User createUser(String username, String password);
public abstract List getUsers() throws AppSecurityException;
public abstract User getUser(String username) throws AppSecurityException;
public abstract void dropUser(User user) throws AppSecurityException;
public abstract void dropUser(String username) throws AppSecurityException;
public abstract Role createRole(String roleName) throws AppSecurityException;
public abstract void dropRole(Role role) throws AppSecurityException;
public abstract List getRoles() throws AppSecurityException;
public abstract Role getRole(String roleName) throws AppSecurityException;
public abstract List getRoles(User user) throws AppSecurityException;
public abstract List getRoles(Role role) throws AppSecurityException;
public abstract void grantRole(User user , Role role)throws AppSecurityException;
public abstract void grantRole(Role role , Role grantee )throws AppSecurityException;
public abstract void revokeRole(User user, Role role) throws AppSecurityException;
}
Evet birtanede SecurityManager abstract clasimiz oldu. Simdi sira geldi bunlarin icini doldurmaya.
Bunun icin birtane SecurtityManagerJAZN classimizi olusturalim

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import oracle.security.jazn.JAZNContext;
import oracle.security.jazn.JAZNException;
import oracle.security.jazn.realm.Realm;
import oracle.security.jazn.realm.RealmManager;
import oracle.security.jazn.realm.RealmRole;
import oracle.security.jazn.realm.RealmUser;
import oracle.security.jazn.realm.RoleManager;
import oracle.security.jazn.realm.UserManager;
import org.accr.model.exception.AppSecurityException;
import org.accr.model.security.Role;
import org.accr.model.security.SecurityManager;
import org.accr.model.security.User;

public class SecurityManagerJAZN extends SecurityManager{

protected String realmName = "jazn.com";

public User createUser(String username, String password) throws AppSecurityException { try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
UserManager userMgr = realm.getUserManager();
RealmUser realmUser = userMgr.createUser(username,password);
User user = new User();
user.setName(realmUser.getName());
return user;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public List getUsers() throws AppSecurityException {
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
UserManager userMgr = realm.getUserManager();
Set users = userMgr.getUsers();
Iterator iter = users.iterator();
ArrayList userList = new ArrayList();
while(iter.hasNext()){
RealmUser realmUser = (RealmUser)iter.next();
User user = new User();
user.setName(realmUser.getName());
userList.add(user);
}
return userList;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public User getUser(String username) throws AppSecurityException {
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
UserManager userMgr = realm.getUserManager();
RealmUser realmUser = userMgr.getUser(username);
User user = new User();
user.setName(realmUser.getName());
return user;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public void dropUser(User user) throws AppSecurityException {
String username = user.getName();
this.dropUser(username);
}

public void dropUser(String username) throws AppSecurityException {
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
UserManager userMgr = realm.getUserManager();
userMgr.dropUser(username);
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public Role createRole(String roleName) throws AppSecurityException{
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
RoleManager realmMgr = realm.getRoleManager();
RealmRole realmRole = realmMgr.createRole(roleName);
Role role = new Role();
role.setName(realmRole.getName());
return role;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public void dropRole(Role role) throws AppSecurityException {
String roleName = role.getName();
this.dropUser(roleName);
}

public List getRoles() throws AppSecurityException {
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
RoleManager roleMgr = realm.getRoleManager();
Set rols = roleMgr.getRoles();
Iterator iter = rols.iterator();
ArrayList roleList = new ArrayList();
while(iter.hasNext()){
RealmRole realmRole = (RealmRole)iter.next();
Role role = new Role();
role.setName(realmRole.getName());
roleList.add(role);
}
return roleList;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public Role getRole(String roleName) throws AppSecurityException {
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
RoleManager roleMgr = realm.getRoleManager();
RealmRole realmRole = roleMgr.getRole(roleName);
Role role = new Role();
role.setName(realmRole.getName());
return role;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public void grantRole(User user, Role role) throws AppSecurityException {
try{
RealmManager realmMgr = JAZNContext.getRealmManager();
Realm realm = realmMgr.getRealm(realmName);
UserManager userMgr = realm.getUserManager();
String userName = user.getName();
RealmUser realmUser = userMgr.getUser(userName);
RoleManager roleMgr = realm.getRoleManager();
RealmRole realmRole = roleMgr.getRole(role.getName());
roleMgr.grantRole(realmUser,realmRole);
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public void grantRole(Role role, Role grantee) throws AppSecurityException {
try{
RealmManager realmMgr = JAZNContext.getRealmManager();
Realm realm = realmMgr.getRealm(realmName);
String roleName = role.getName();
RoleManager roleMgr = realm.getRoleManager();
RealmRole realmRole = roleMgr.getRole(roleName);
RealmRole realmGrantee = roleMgr.getRole(role.getName());
roleMgr.grantRole(realmRole, realmGrantee);
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public void revokeRole(User user, Role role) throws AppSecurityException {
try{
RealmManager realmMgr = JAZNContext.getRealmManager();
Realm realm = realmMgr.getRealm(realmName);
UserManager userMgr = realm.getUserManager();
String userName = user.getName();
RealmUser realmUser = userMgr.getUser(userName);
RoleManager roleMgr = realm.getRoleManager();
RealmRole realmRole = roleMgr.getRole(role.getName());
roleMgr.revokeRole(realmUser, realmRole);
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public List getRoles(User user) throws AppSecurityException {
try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
RoleManager roleMgr = realm.getRoleManager();
UserManager userMgr = realm.getUserManager();
String userName = user.getName();
RealmUser realmUser = userMgr.getUser(userName);
Set rols = roleMgr.getGrantedRoles
(realmUser,true);
Iterator iter = rols.iterator();
ArrayList roleList = new ArrayList();
while(iter.hasNext()){
Role role = new Role();
role.setName(iter.next().getName());
roleList.add(role);
} return roleList;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}

public List getRoles(Role role) throws AppSecurityException { try{
RealmManager reamMgr = JAZNContext.getRealmManager();
Realm realm = reamMgr.getRealm(realmName);
RoleManager roleMgr = realm.getRoleManager();
String roleName = role.getName();
RealmRole realmRole = roleMgr.getRole(roleName);
Set rols = roleMgr.getGrantedRoles(realmRole, true);
Iterator iter = rols.iterator();
ArrayList roleList = new ArrayList();
while(iter.hasNext()){
Role role1 = new Role();
role.setName(iter.next().getName());
roleList.add(role1);
}
return roleList;
}catch(JAZNException e){
throw new AppSecurityException(e);
}
}
}

30 Mart 2009 Pazartesi

Karisik Resimler



Bende ogrenciyim ama evimiz hic bu hale gelmemisti :), herkes battaniyesini evinden getirmis heralde









Dogru yol :), amca ters :)


29 Mart 2009 Pazar

(JAAS) ve EJB Güvenliği

JAAS java uygulamaları için kimlik doğrulama ve yetkilendirme işlemlerini portatif bir şekilde yapılmasını sağlayan bir arayüzdür. JAAS'ı kullanarak kendiniz sisteme giriş yapmayı ve yetkilendirmeyi sağlayan mödüler API'ler yazabilirsiniz.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 authenticationMasaüstü uygulamaları gibi web uygulamasında da sisteme giriş gerçekleştiğinde, istemci EJB metodlarını kullancının yetkileri izin verdiği ölçüde çağırır.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.Aşağıda yukarıdaki yapının resim olara çizilmiş halini görebilirsiniz:Bu yazıda JAAS yüzeysel olarak incelenmiştir. Detaylı bilgi için lütfen bkz. JAAS Reference GuideJAAS 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