Spring Icin Acegi Guvenlik Sistemi Btosun Wwwjavadilicom

  • Uploaded by: www.javadili.com
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Spring Icin Acegi Guvenlik Sistemi Btosun Wwwjavadilicom as PDF for free.

More details

  • Words: 2,877
  • Pages: 29
m i.c o

dil

Spring için

ww w. ja

va

Acegi Güvenlik Sistemi

Hazırlayan : Akif Burak Tosun Hacettepe Universitesi - 20221925

İletişim: [email protected]

1

m

İçindekiler: Önsöz

1.1.

Giriş

1.2.

Güncel Durum

1.3.

Üst Düzeyli Tasarım

i.c o

Bölüm 1: Güvenlik

Anahtar Bileşenler

1.3.2.

Desteklenen Güvenli Nesneler

1.3.3.

Kurulum Nitelikleri

1.4. İstem Bağlamları 1.4.1. Tarihsel Gelişim 1.4.2. SecurityContext

dil

1.3.1.

va

1.5. Kimlik Denetimi (Authentication) 1.5.1. Kimlik Denetim İstemleri 1.6. Yetki Protokolü (Authorization) 1.6.1. Verilen Yetkiler

ww w. ja

1.6.2. Erişim Kararları Yönetimi

Bölüm 2 : Neden ve Nasıl Acegi? 2.1. J2EE’de CMA

2.1.1. Temel Kimlik Denetimi

2.1.2. Form Tabanlı Kimlik Denetimi

2.2. Tomcat Alanları

2.3. CMA’daki Problemler

2.4. Çözüm: Acegi Güvenlik

2.5. Acegi Güvenlik Ayarları,

2.5.1. “web.xml” ayarları

2.5.2. “appContext~security.xml” ayarları 2

2.5.3. Temel Kimlik Denetimi

2.5.5. Form Tabanlı Kimlik Denetimi

m

2.5.4. Güvenli HTTP İstemi

2.5.7. Parola Şifreleme 2.5.8. JDBC Sağlayıcısı 2.5.9. SQL Uyarlama

i.c o

2.5.6. KimlikDenetim Sağlayıcıları (Authentication Providers)

2.5.10. Metotları Rollerle Güvelik Altına Alma 2.6. Diğer Özellikler

ww w. ja

va

dil

2.7. J2EE vs. Acegi Güvenlik Sistemi

3

m

Spring için Acegi Güvenlik Sistemi (AGS)

i.c o

Önsöz

Bu doküman, Spring çatısının getirdiği kimlik denetimi ve yetki

protokolünü sağlayan sınıfları içeren Acegi Güvenlik Sistemi(AGS)’ne referans

Bölüm 1 : Güvenlik

va

1.1.Giriş

dil

veren rehberlik sağlamaktadır.

Acegi Güvenlik Sistemi , Spring destekli projeler için kimlik denetimi ve yetki protokolünü popüler “web container (kap)”lar aracılığıyla sağlayan

ww w. ja

sistemdir. Bu güvenlik mimarisi “The Spring Way” gelişiminin üstüne kurulmuş olup ; bağlamlarını, kesiştiricileri ve arabirim sürücülerini programlamayı kapsamaktadır. Sonuç olarak “Spring için Acegi Güvenlik Sistemi” Spring tabanlı yazılımların güvenliği için aranan ve kompleks mimarilere kolayca uyum sağlayabilen bir sistemdir.

Güvenlik iki belirgin işlemi içermektedir , kimlik denetimi

(authentication) ve yetki protokolü (authorization). Kimlik denetiminin yaptığı , ziyaretçinin iddia edilen kişi olup olmadığını çözümlemektir. Öte yandan yetki

protokolünün ilgilendiği ise kimlik denetimi yapılmış bir ziyaretçinin yapmakta

olduğu işlemi yapıp yapamayacağının

4

Spring için AGS’de başından sonuna kadar kimlik denetimi yapılacak

m

olan “kullanıcı, sistem veya gereç” temel olarak ele alınır. Bu güvenlik mimarisinde “roller ya da gruplar” diye- önceki uygulamalardan alışkın

Güvenlik tarafından sağlanmıştır.

1.2.Güncel Durum

i.c o

olduğunuz- bir kavram bulunmamasına karşın eşdeğer işlevsellik Acegi

Spring için Acegi Güvenlik Sistemi , Spring Topluluğu tarafından yaygın olarak kullanılmaktadır. Uygulama Programı Arabirimleri (API) durağan olarak

dil

ele alınır ve sadece önemsenmeyecek kadar küçük değişiklikler beklenir. Daha önce de söylenildiği gibi , diğer projelerde de yapılan “geriye uyumluluk ve gelişim” arasındaki dengeyi tutturmak zorundayız. Yürürlülükteki versiyon 0.6.1.’da , Acegi Güvenlik “Apache Taşınabilir Runtime Projesi”nin uyarlanan

va

kılavuzunu kullanmaktadır. Bu kılavuza şu adresten ulaşabilirsiniz : http://apr.apache.org/versioning.html Yayınlanacak versiyon 1.0.0. için öncelikli küçük geliştirmeler – her birinin ekstra işlevselliği olmasına rağmen projenin temel arayüzleri ve sınıfları

ww w. ja

değiştirmeyecektir - şimdiden planlandı. Bu sebeple Spring için Acegi Güvenlik Sistemi’nin kullanıcıları şu anki versiyonu gelecekte de rahatlıkla kullanabileceklerdir.

1.3. Üst Düzeyli Tasarım

1.3.1. Anahtar Bileşenler

Çoğu şirket uygulamalarının dört temel güvenlik gereksinimi vardır. İlk

olarak bir tekil kişiyi tanımlayabilmeleri gerekir. İkincil olarak web istemlerini güvenli hale getirebilmeleri gerekir. Üç , şirket uygulamaları servis katmanı metotlarının güvenliğini sağlayabilmelidir. Son olarak , çok nadir de olsa şirket

5

uygulamaları etki alanındaki örnek nesnelerin de güvenliğini sağlamalıdır.

içine alan geniş bir çatıda sağlayabilmektedir.

m

Acegi Güvenlik , bu dört temel şirket uygulaması gereksinimlerini ortak olarak

-

i.c o

Spring için AGS esasen 8 temel işlevsel kısımdan oluşmaktadır:

“Authentication” (kimlik denetim) nesnesi: Bu nesne tekil kişiyi , ve bu kişinin otoriteler tarafında verilen güven belgesini ve kimlik belgesini içerir. Ayrıca bu nesne kimlik denetimine ilişkin (kaynağın TCP/IP adresi

dil

gibi) ek bilgiler de tutabilir.

- “ContextHolder” (bağlamı tutan) : Authentication nesnesini bir ThreadLocal’de (yükümlü nesne) tutar.

- “AuthenticationManager” : ContextHolder aracılığıyla sunulan

va

Authentication nesnesini denetler.

- “AccessDecisionManager” : Verilen bir işlemi onaylar. - “RunAsManager” : Verilen bir iş işletilirken isteğe bağlı olarak Authentication nesnesinin yerini değiştirir.

ww w. ja

- “Güvenli Nesne” kesiştirici (interceptor) : İşletimin ele alınması ve verilen bir işin işletilmesinden sonra ; kimlik denetimini , yetki protokolünü ve işletme yenilenmesini koordine eder.

- “AfterInvocationManager” : “Güvenli Nesne” kesiştirici’den dönen bir nesneyi düzenleyebilir; bu işlemi, tekil şahısın erişim yetkisi olmayan Collection’larını silerek yapar.

- Erişim Denetim Listesi yönetim paketi : Erişim denetim listelerinin etki alanındaki örnek nesnelere uygun olup olmadığını denetler.

6

“Güvenli Nesne” kesiştirici, Acegi Güvenlik’in çoğu anahtar sınıfını

m

işletir ve aynı zamanda çatının (framework) en önemli özniteliklerini dağıtır. Bunun önemini belirtmek için Şekil-1’de anahtar ilişkilerini ve

va

dil

i.c o

AbstractSecurityInterceptor ’ın somut uygulamaları belirtilmiştir.

ww w. ja

Şekil 1: “Güvenli Nesne” Modeli

Her “Güvenli nesne” kesiştiricisi (gelecekte “güvenlik kesiştiricisi” olarak

kullanılacaktır) belirli bir “güvenli nesne” türüyle birlikte çalışır. Peki güvenli nesne nedir? Güvenli nesneler üzerilerine güvenlik uygulanabilen nesnelerdir. Bir güvenli nesne bazı geri çağrım biçimlerini sağlamalıdır böylece güvenlik kesiştiricisi yapması gerekenleri saydam bir şekilde gerçekleştirir ve zamanı geldiğinde istenilen işlemi yapması için ilgili nesneyi geri çağırır. Eğer güvenli nesneler yerel olarak geri çağırma yaklaşımını sağlamıyorsa bir sargı (wrapper) yazılması gerekir ve bu sayede işlem gerçekleştirilir.

7

Her güvenli nesne net.sf.acegisecurity.intercept altında

Böylece sunulan her tür güvenli nesneyi destekler.

m

kendi paketine sahiptir. Diğer bütün paketler güvenli nesneden bağımsızdır.

Sadece durdurma ve yetkilendirme istemleri için tamamen yeni bir yol

i.c o

tasarlamak isteyen yazılımcılar güvenli nesneleri direkt olarak kullanmalıdır. Örneğin ; MethodInvocations nesnesini kullanmayan mesajlaşma sistemine yapılan çağrıları güvenli kılmak için yeni bir güvenli nesne

oluşturulabilir. Çoğu Spring uygulaması günümüzde desteklenen üç temel güvenli nesne türünü (AOP Alliance MethodInvocation, AspectJ

dil

JoinPoint ve web istemi FilterInterceptor) şeffaflıkla kullanmaktadır.

Yukarıda belirtilen Acegi Güvenlik için gerekli olan sekiz anahtar

va

kısım’ın önemli olanları bu dokümanda ele alınacaktır. 1.3.2. Desteklenen Güvenli Nesneler

Şekil-1’in tabanında da görüldüğü gibi Spring için Acegi Güvenlik Sistemi günümüzde üç güvenli nesneyi desteklemektedir.

ww w. ja

İlki AOP Alliance MethodInvocation’ı içermektedir. Bu Spring

bean’lerini korumak için var olan güvenli nesne türüdür. Yazılım geliştiriciler

genellikle bu güvenli nesne türünü şirketsel nesneleri korumak için kullanırlar.

Standart bir Spring-tabanlı bean’i MethodInvocation gibi geçerli kılmak için , bean basitçe bir ProxyFactoryBean veya

BeanNameAutoProxyCreator veya DefaultAdvisorAutoProxyCreator tarafından yayınlanır. Çoğu Spring geliştiricisi kendi işlembilgilerinde veya diğer Spring alanlarında bu duruma alışkın hale gelmiştir.

İkinci tür AspectJ JoinPoint’ı içerir. AspectJ; genellikle Spring bean

kabının dışında yönetilmesiyle birlikte , etki alanındaki örnek nesnelerin

8

güvenliğini sağlamada tek yol olarak kullanılır. AspectJ kullanarak “new

m

Person();” gibi standart mimariler kullanılabilir ve tüm güvenlik Acegi

Güvenlik tarafından sağlanabilir. Tekil durumu yaratıp, uygun kimlik denetim yöneticisine, erişim kararları yöneticisine ve ilgili diğer alanlara ileten

i.c o

AspectJSecurityInterceptor ise hala Spring tarafından yönetilmektedir.

Üçüncü ve son tür FilterInvocation’dır. Spring için Acegi Güvenli Sistemi’nin içerdiği bir nesnedir. İçerdeki bir süzgeç tarafından yaratılır ve HTTP ServletRequest, ServletResponse ve FilterChain’ı sarar.

dil

FilterInvocation, HTTP kaynaklarının korunmasını sağlar. Yazılım geliştiriciler genellikle bu sistemin hangi mekaniklerle çalıştığını anlamak zorunda değildir çünkü sadece güvenlik süzgeçlerini web.xml’e eklerler ve

va

geri kalan işi güvenlik sistemi halleder. 1.3.3. Kurulum nitelikleri

Her güvenli nesne sonsuz sayıda bireysel istemi temsil edebilir. Örneğin ,

ww w. ja

bir MethodInvocation herhangi bir metodu herhangi argümanlarla çağrılmasını temsil edebilir, aynı zamanda FilterInvocation da

herhangi bir HTTP URL’sini temsil edebilir. Spring için Acegi Güvenlik Sistemi, olası her istem için uygulanan

kurulumları kaydetmek zorundadır. BankManager.getBalance(int accountNumber) istemi için gerekli güvenlik kurulumu ile, BankManager.approveLoan(int applicationNumber) istemi için gerekli güvenlik kurulumundan çok farklı olmalıdır. Daha basit ele alırsak ; http://some.bank.com/index.htm sayfasına yapılan bir istem için

gerekli güvenlik kurulumuyla ,

http://some.bank.com/manage/timesheet.jsp sayfasına yapılan

bir istem için gerekli güvenlik kurulumu birbirinden farklı olmalıdır.

9

Farklı istemlerle alakalı çeşitli güvenlik kurulumlarını saklamak için

ConfigAttribute arayüzü tarafından simgelenir.

m

kurulum niteliği kullanılır. Gerçekleştirim katmanında bir kurulum niteliği

Alakalı istem ile ilişkilendirilmiş ConfigAttribute’lar yığını bir

i.c o

ConfigAttributeDefinition içerisinde tutulur. Bu somut sınıf sadece ConfigAttribute’ları tutar bunun dışında başka bir iş yapmaz.

Güvenlik kesiştiricisine bir istem geldiğinde, hangi güvenlik kurulumunun uygulanacağını belirlemek zorundadır. Başka bir deyişle , isteme uygulanan ConfigAttributeDefinition’ı bulmak zorundadır. Bu karar

dil

ObjectDefinitionSource arayüzü tarafından ele alınır. Bu arayüz tarafından sağlanan ana metot “public ConfigAttributeDefinition getAttributes(Object object)” metodudur. Buradaki Object güvenli nesnedir. Güvenli nesne geri çağrıldığında isteme dair detayları taşır

va

böylece “ObjectDefinitionSource gerçekleştirimi” kendisi için gerekli olan detayları ConfigAttributeDefinition içeriğine bakarak bulabilir.

ww w. ja

1.4. İstem Bağlamları 1.4.1. Tarihsel Gelişim

0.9.0. sürümünden önceki sürümlerde oturumlar arası bağlamları

saklamak için Acegi Güvenlik bir ContextHolder kullanıyordu. Context sınıfına ilişkin bir alt sınıf olan SecureContext tanımlanıyordu ki bu Authentication nesnesini taşımak için bir arayüzü oluşturuyordu. Bu kavram Spring geliştiricileri tarafından uzun tartışmalar sonucu kararlılığı sağlamak adına 0.9.0 sürümünde kaldırılmıştır. Tartışma örneğini incelemek için bağlantıyı izlemeniz yeterlidir:

http://article.gmane.org/gmane.comp.java.springframew

ork.devel/8290

10

1.4.2. SecurityContext (SecureContext)

m

SecurityContext’leri saklamak için Acegi Güvenlik Sistemi SecurityContextHolder kullanır. SecurityContext nesnesi bir tek

i.c o

Authentication get/set metotları içerir.

1.5. Kimlik Denetimi (Authentication) 1.5.1. Kimlik Denetim İstemleri

İstemci kendi güvenlik kimliğini Acegi Güvenliğe sunmak için kodunda

dil

bir yola ihtiyaç duyar. Bu Authentication arayüzünün görevidir.

Authentication arayüzü üç önemli nesneyi tutar : tekil kişi (istemcinin kimliği), kimlik belgesi (istemcinin kimliğinin kanıtı, örneğin parola) ve bu tekil kişiye verilen yetkiler. Tekil kişiye verilen yetkiler

va

AuthenticationManager tarafından yerleştirilirken , Tekil kişi ve bu

ww w. ja

kişiye ait kimlik belgesi istemci kodu tarafından yerleştirilir.

11

m i.c o dil

va

Şekil 2: Anahtar Kimlik Denetim Mimarisi Şekil-2’de görüldüğü üzere Spring için Acegi Güvenlik Sistemi birkaç somut Authetication gerçekleştirimi içerir:

ww w. ja

! UsernamePasswordAuthenticationToken, kullanıcı adı ve parolanın sırasıyla tekil kişi ve kimlik belgesi olarak kabul edilmesini

sağlar. Bu ayrıca HTTP Oturum Kimlik Denetim sistemi tarafından yaratılır.

! TestingAuthenticationToken, kimlik denetimi yapılmış bir nesnenin kendisine ilişkilendirilmiş AthenticationProvider olarak kabul edilmesi ve bunun test edilmesini kolaylaştırır.

Bir tekil kişiye yüklenen yetkiler GrantedAuthority arayüzü

tarafından belirtilir. Bu arayüz yetki protokolü (authorization) bölümünde ele alınır.

12

m

1.6. Yetki Protokolü (Authorization) 1.6.1. Verilen Yetkiler

Kimlik denetimi bölümünde de anlatıldığı gibi tüm Athentication

i.c o

gerçekleştirimlerinde GrantedAuthority nesnelerini saklayacak bir diziye ihtiyaç duyulur. Bu nesneler tekil kişiye verilmiş yetkileri betimlemeye yarar. GrantedAuthority nesneleri Athentication içerisine

AthenticationManager tarafından yerleştirilir , daha sonra da

AccessDecisionManager tarafından yetki kontrolü yapılırken okunur.

dil

GrantedAuthority tek bir metodu olan bir arayüzdür:

va

public String getAuthority();

Bu metot AccessDecisionManager‘a , GrantedAuthority‘nin kesin bir String betimlemesini elde etmesi kolaylığını sağlar. Böylelikle bu String tabanlı GrantedAuthority nesnesinin betimlemeleri herhangi bir

ww w. ja

AccessDecisionManager tarafından kolaylıkla okunabilir. Eğer bir GrantedAuthority nesnesi String olarak kesin bir

betimlemeye dönüştürülemiyorsa “kompleks” olarak düşünülür ve getAuthority() null döndürür.

Bu kompleks durumu engellemek için Acegi Güvenlik Sisteminde tek bir

kesin GrantedAuthority String betimlemesine izin verir. Bu sayede kullanıcı tarafından belirlenmiş tüm String betimlemeleri bir GrantedAuthority nesnesine dönüştürülebilir.

13

1.6.2. Erişim Kararları Yönetimi

m

AccessDecisionManager son erişim kontrol kararlarını almadan sorumludur. Bu arayüz üç metot içerir:

i.c o

public void decide(Authentication authentication, Object object, ConfigAttributeDefinition config) throws AccessDeniedException;

dil

public boolean supports(ConfigAttribute attribute);

public boolean supports(Class clazz);

İlk metottan da görülebileceği gibi yetkilendirme kararını alırken tüm

va

ilgili veriler AccessDecisionManager ‘ın elinden geçer. Buradaki güvenli nesne geçişi , denetlenecek asıl güvenli nesnenin argümanlarını geçerli kılar. Örneğin , diyelim ki güvenli nesnemiz MethodInvocation. Herhangi bir

ww w. ja

Customer argümanı için MethodInvocation’ı sorgulamak daha kolay olacaktır, sonra tekil kişinin Customer üzerindeki ilgili işlemi yapma izni olup olmadığını bazı güvenlik mantıklarını gerçekleştirme işi AccessDecisionManager tarafından yapılır. Eğer erişim hakkı yoksa AccessDeniedException aykırı durumu gerçekleştirim tarafından

fırlatılır.

14

m

Bölüm 2 : Neden ve Nasıl Acegi?

i.c o

2.1. J2EE’de CMA

! CMA (Container Managed Authentication), Servlet API üzerine kurulmuştur.

security-constraints (güvenlik kısıtlamaları) , web.xml

dil

!

içerisinde yapılandırılır. !

Kimlik denetim alanı yapılandırması , uygulama sunucusu

va

içerisinde yapılır.

2.1.1. Temel Kimlik Denetimi

ww w. ja

<security-constraint>

<web-resource-collection>

<web-resource-name>Güvenli Alan /*



*







TEMEL Güvenli Bölge



15

m

2.1.2. Form Tabanlı Kimlik Denetimi ! /WEB-INF/web.xml: <security-constraint>

i.c o

<web-resource-collection>

<web-resource-name>Güvenli Alan *.html

*



dil



FORM

va

/login.jsp /loginError.jsp


ww w. ja

! /login.jsp














16

! /loginError.jsp

m

Giriş Hatalı - lütfen yeniden deneyin.

i.c o



2.2. Tomcat Alanları (Tomcat Realms)

JNDIRealm ! JDBCRealm Örneği:

dil

! MemoryRealm , JDBCRealm , DataSourceRealm , JAASRealm,

va



ww w. ja


debug="99" driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/ equinox?autoReconnect=true"

connectionName="root" connectionPassword="" userTable="users" userNameCol="username" userCredCol="password"

userRoleTable="user_roles" roleNameCol="rolename"/>



17

m

2.3. CMA’daki problemler ! Düşünüldüğü gibi portatif değildir

i.c o

! Bütün servlet kapları(container) JDBCRealm’le taşınamaz ! Form tabanlı kimlik denetimi sorunları:

1. Çoğu zaman kullanıcı/rol sorgularını SQL ile kontrol edemeyiz 2. Kullanıcının ilk login olduğu anı /j_security_check üzerinde

dil

filtreleyerek yakalama imkanımız yok

3. Gerçekleştirimi farklı sunucularda değişir.

va

2.4. Çözüm : Acegi Güvenlik

! Herşey kendi uygulamamız içerisinde ayarlanabilir ! URL’lerin güvenliğini her zamanki ifadelerle oluşturulan rollerle

ww w. ja

sağlayabiliriz.

! URL örüntüleri her zamanki ifadelerle veya Ant-türü örüntülerle olabilir (örneğin : /**/admin*.html)

! Desteklediği kimlik denetim yöntemleri : Basic, Digest, Form, Yale Central Authentication System(CAS)

! Kimlik denetim sağlayıcıları (Authentication providers) : JDBC , XML, LDAP , CAS

18

m

2.5. Acegi Güvenlik Ayarlamaları

2.5.1. “web.xml” ayarları

i.c o



securityFilter

net.sf.acegisecurity.util.FilterToBeanProxy


<param-value>

dil

<param-name>targetClass

net.sf.acegisecurity.util.FilterChainProxy



va



securityFilter /*

ww w. ja



2.5.2. “appContext~security.xml” ayarları

! filterChainProxy bean : Kimlik denetimi işlemi için gerekli süzgeçler(filter) listesini içerir. Bu süzgeçler aşağıdaki spesifik görevleri gerçekleştirir :

o httpSessionContextIntegrationFilter: Bu süzgeç kullanıcının kimlik denetimini ContextHolder

içerisinde saklamak için

kullanıcının açtığı oturumla iletişim kurmakla sorumludur.

19

kimlik denetimi başlıklarını işleme koyar

ve sonuçlarını

i.c o

ContextHolder’ın içine yerleştirir.

m

o basicProcessingFilter: Bu süzgeç bir HTTP isteminin temel

o securityEnforcementFilter: Bu süzgeç istemleri, kullanıcıların hangi URL’lere gitme izni olduğunu belirleyen FilterSecurityInterceptor’a iletir


dil



class="net.sf.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource">

va



CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT

/j_security_check*=

ww w. ja

httpSessionContextIntegrationFilter, authenticationProcessingFilter

/*.html*=httpSessionContextIntegrationFilter, remoteUserFilter,anonymousProcessingFilter, securityEnforcementFilter

/*.jsp=httpSessionContextIntegrationFilter, remoteUserFilter







20

m

2.5.3. Temel Kimlik Denetimi


<property name="providers"> <list>

i.c o

class="net.sf.acegisecurity.providers.ProviderManager">



dil




class="net.sf.acegisecurity.providers.dao.memory. InMemoryDaoImpl">



va

<property name="userMap" value="tomcat=tomcat,ROLE_USER"/>


ww w. ja

class="net.sf.acegisecurity.providers.dao. DaoAuthenticationProvider"> <property name="authenticationDao" ref="inMemoryDaoImpl"/>





<property name="authenticationManager" ref="authenticationManager"/>

<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint"/>



21

m


class="net.sf.acegisecurity.ui.basicauth. BasicProcessingFilterEntryPoint">

<property name="realmName" value="ProtectedArea"/>

i.c o



2.5.4. Güvenli HTTP İstemi


dil

class="net.sf.acegisecurity.context.

HttpSessionContextIntegrationFilter"> <property name="context"

value="net.sf.acegisecurity.context.security.

va

SecureContextImpl"/>



class="net.sf.acegisecurity.intercept.web. SecurityEnforcementFilter">

ww w. ja

<property name="filterSecurityInterceptor" ref="filterInvocationInterceptor"/>

<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint"/>



<property name="allowIfAllAbstainDecisions" value="false"/>

<property name="decisionVoters"> <list>





22

m


class="net.sf.acegisecurity.intercept.web.

i.c o

FilterSecurityInterceptor">

<property name="authenticationManager" ref="authenticationManager"/>

<property name="accessDecisionManager"

ref="httpRequestAccessDecisionManager"/> <property name="objectDefinitionSource">

dil



CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /*.html*=ROLE_USER



ww w. ja



va

/*.jsp=ROLE_USER

2.5.5. Form Tabanlı Kimlik Denetimi

! Temel kimlik denetiminden , form tabanlı kimlik denetimine geçiş için sadece XML konfigürasyonu yeterlidir.

! Login ve LoginError sayfaları CMA’daki gibi olabilir ! “Beni Hatırla” ve “Parola Şifreleme” gibi işlemler için kod gerekmez – sadece xml.

23

2.5.6. Kimlik Denetimi Sağlayıcıları (Authentication Providers)

m




i.c o

<property name="authenticationDao" ref="inMemoryDaoImpl"/>

class="net.sf.acegisecurity.providers.dao.memory. InMemoryDaoImpl"> <property name="userMap">

dil

tomcat=tomcat,ROLE_USER

springlive=springlive,ROLE_USER


va



2.5.7. Parola Şifreleme


ww w. ja

class="net.sf.acegisecurity.providers.dao.memory. InMemoryDaoImpl">

<property name="userMap">

tomcat=536c0b339345616c1b33caf454454d8b8a190d6c, ROLE_USER

springlive=2a9152cff1d25b5bbaa3e5fbc7acdc6905c9f251, ROLE_USER







24


m

class="net.sf.acegisecurity.providers.dao. DaoAuthenticationProvider">

<property name="authenticationDao" ref="inMemoryDaoImpl"/>


i.c o

<property name="passwordEncoder" ref="passwordEncoder"/>

class="net.sf.acegisecurity.providers.encoding. ShaPasswordEncoder"/>


dil

2.5.8. JDBC Sağlayıcısı

! JDBC kullanabilmek için dataSource’a bağımlı bir bean tanımlamamız

va

yeterlidir:


class="net.sf.acegisecurity.providers.dao.jdbc. JdbcDaoImpl">

ww w. ja

<property name="dataSource" ref="dataSource"/>



! Kullanıcı ve rollerini seçebilmemiz için varsayılan SQL cümlecikleri:

"SELECT username,password,enabled FROM users WHERE username = ?";

"SELECT username,authority FROM authorities WHERE username = ?";

25

m

2.5.9. SQL Uyarlama ! SQL’i yeniden yazmak için usersByUsernameQuery ve

i.c o

authoritiesByUsernameQuery özelliklerini belirlememiz gerekir:


class="net.sf.acegisecurity.providers.dao.jdbc. JdbcDaoImpl">

<property name="dataSource" ref="dataSource"/> <property name="usersByUsernameQuery">

dil

SELECT username,password,enabled as 'true' FROM users WHERE username = ?

<property name="authoritiesByUsernameQuery"> SELECT username,rolename FROM user_roles



va

WHERE username = ?


<property name="passwordEncoder" ref="passwordEncoder"/>

ww w. ja



26

m

2.5.10. Metotları Rollerle Güvelik Altına Alma


class="net.sf.acegisecurity.intercept.method.aopalliance.

i.c o

MethodSecurityInterceptor"> <property name="authenticationManager" ref="authenticationManager"/>

<property name="accessDecisionManager" ref="accessDecisionManager"/>

<property name="objectDefinitionSource">

dil

org.appfuse.service.UserManager.getUser=ROLE_ADMIN org.appfuse.service.UserManager.getUsers=ROLE_USER org.appfuse.service.UserManager.removeUser=ROLE_ADMIN

...

va

org.appfuse.service.UserManager.saveUser=ROLE_ADMIN



ww w. ja

<property name="target">





<property name="preInterceptors"> <list>





27

m

2.6. Diğer Özellikler ! Access Control Lists (ACLs) : Her nesne için izin kontrolü yapar.

nesneleri koleksiyonlardan kaldırır.

va

dil

! Denetim ve Olay Günlükleri :

i.c o

! AfterMethodInvocation Kesiştiricisi : Kullanıcının okuma izni olmadığı

2.7. J2EE vs. Acegi Güvenlik Sistemi Artıları

ww w. ja

Güvenlik Çerçevesi (Security Framework) J2EE Güvenlik

Uygulama açısından kurulumu kolaydır. Kullanıcı Alanı konfigürasyonu kurgulayan kişinin elindedir. Standart olduğu için hakkında bir çok kaynak bulunabilir.

Eksileri Bir uygulama sunucusundan diğer uygulama sunucusuna bağlantı kurmak zordur. Uygulama geliştiricisi konfigürasyonu standartlaştırılmış olmasına rağmen, sunucu için alan konfigürasyonu standart değildir. Servis katmanı metotlarının güvenliği sadece EJB’ler kullanılarak yapılabilir. 28

Çok fazla XML konfigürasyonu gerektiriyor

m

Güvenlik konfigürasyonları uygulamadan tamamen bağımsızdır – uygulama sunucusunun taşınması durumunda kaygı duymanız gerekmez.

Öğrenme eğrisi çok diktir, ilk başlangıçta çok zor gelebilir.

i.c o

Acegi Güvenlik

Alan bilgisi uygulama ile birlikte paketlenir , yerini değiştirmek oldukça zordur.

dil

J2EE güvenliğin eksikliklerini kapatır ve uyarlama özelliği sayesinde aynı şeylere izin de verir. CAS ile tekil oturum açmaya izin verir.

Kaynaklar:

va

Hızla gelişiyor ve yenileniyor.

ww w. ja

AcegiSecurity / Matt Raible

Acegi Security System For Spring / Ben Alex Acegi Security Style / Matthew Porter

29

Related Documents