Professional Documents
Culture Documents
Springsecurityframework
Springsecurityframework
Framework
www.java-egitimleri.com 1
Ajanda
Yetkilendirme
Yetkilendirme Akışı & Yetkilendirme Modeli
Namespace Konfigürasyonu
Namespace ile Spring Security Kullanımı
www.java-egitimleri.com 3
Güvenlik İhtiyaçlarına
Genel Bakış
Kurumsal uygulamaların 2 temel güvenlik
ihtiyacı söz konusudur
1.Kimliklendirme (Authentication)
2.Yetkilendirme (Authorization)
Web isteklerinin yetkilendirilmesi
Servis metodlarının yetkilendirilmesi
Domain nesnelerine yetki bazında erişim
sağlanması
Nesnelerin attribute'ları düzeyinde erişim
www.java-egitimleri.com 4
Spring Security Nedir?
www.java-egitimleri.com 5
Özellikleri
www.java-egitimleri.com 9
Neden web.xml
security değil?
Web container’a bağımlı bir kimliklendirme
altyapısı ortaya çıkar
Web kaynaklarını(URL) yetkilendirmek için
sınırlı bir model mevcuttur
Uygulamada metod ve domain nesneleri
düzeyinde yetkilendirme yapmak mümkün
değildir
www.java-egitimleri.com 10
Neden JAAS değil?
www.java-egitimleri.com 11
Temel Yapıtaşları:
Kullanıcı – Rol İlişkisi
Secure resource,
Bir web sayfası,
Servis metodu veya
Domain nesnesi olabilir
Kullanıcı
www.java-egitimleri.com 12
Temel Yapıtaşları :
Rol Grubu – Rol İlişkisi
Onay Personeli Sorgulama Personeli Giriş
Rolü Rolü Personeli Rolü
Sistem Admin
Rolü
Kullanıcı
www.java-egitimleri.com 13
Temel Yapıtaşları:
Domain Sınıfları
Uygulamanın security context Kullanıcıların yetkileri
bilgisinin tutulduğu yerdir GrantedAuthority ile ifade edilir
Default olarak bu bilgi
ThreadLocal bir yapıda tutulur
Başarılı bir
kimliklendirme
sonucunda
UserDetails Uygulamaya o anda erişen username
Authentication'a, kullanıcı bilgisi principal bilgisini kullanarak
o da SecurityContext'e olarak ifade edilir UserDetails ilgili
Yerleştirilir realm'den yüklenir
Security Principals
Context bilgisi
Bilgisini (çoğu zaman)
Request UserDetails tipinde bir nesnedir, uygulamaların User sınıfları
aralıklarında bu arayüzü implement eder
HttpSession'da saklar www.java-egitimleri.com 14
Spring Security Filter
Zinciri
HTTP Request
Web isteğinin
HTTPS’den
ChannelProcessing gelmesini
Filter garanti eder
Kullanıcının
oturum
sayısını
kontrol eder
ConcurrentSession
Filter
Web isteğinin
sonunda
SecurityContext’
SecurityContext i HttpSession’da
Persistence saklar
Filter
www.java-egitimleri.com 15
Spring Security Filter
Zinciri
Logout işlemini LogoutFilter
gerçekleştirir
UsernamePassword Authentication
işlemini
Web isteğinin Authentication gerçekleştirir
getRemoteUser(), Filter
isUserInRole()
metodlarında
SecurityContext’i SecurityContext
kullanmasını
sağlar
HolderAware
RequestFilter Web isteğinde
remember-me
cookie mevcutsa,
değerini
RememberMe SecurityContextH
older’a set eder
Authentication
Filter
www.java-egitimleri.com 16
Spring Security Filter
Zinciri
SecurityContext
Holder’a
anonymous
Anonymous Authentication
AuthenticationFilter token’ı koyar
FilterSecurityInt
erceptor'de
meydana gelen
AuthenticationEx
ception ve
AccessDeniedExc ExceptionTranslation
eption'ların Filter
uygun sayfalara
yönlendirilmesini Hedef URL’e
sağlar yetkiye göre
erişilmesini
FilterSecurity sağlar.
Interceptor AuthenticationE
xception veya
AccessDeniedEx
ception
fırlatabilir
secureWebPage.jsp
www.java-egitimleri.com 17
Spring Security
Konfigürasyonu
<filter>
<filter-name> web.xml içerisinde
springSecurityFilterChain DelegatingFilterProxy ile
</filter-name> Bir Servlet Filter tanımı
<filter-class> yapılır
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>
springSecurityFilterChain
</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
www.java-egitimleri.com 18
Spring Security
Konfigürasyonu
Servlet Container
DelegatingFilterProxy sınıfı,
web.xml içerisindeki tanım
ile ApplicationContext içinde
tanımlı Filter bean'ları
Delegating Web
arasında köprü vazifesi görür Resource
FilterProxy
Web client
ApplicationContext
springSecurityFilterChain
FilterChainProxy'de web.xml
içerisinde tek bir filter ile bütün Filter Filter Filter
security filter zincirinin 1 2 n
tanımlanmasını sağlar
www.java-egitimleri.com 19
Kimliklendirme Modeli
Başarılı kimliklendirme sonucu
Kimliklendirmenin başladığı yer AbstractAuthentication Authentication nesnesi oluşur
ProcessingFilter'dır. Her auth yönteminin kendine Farklı auth yöntemlerinin kendine
özel bir sub class'ı mevcuttur özel token impl mevcuttur
Kimliklendirmeyi
AuthenticationManager Asıl işlem
koordine eder. İşi Auth
AuthenticationProvider Provider'da
nesnelerine delege eder gerçekleşir
Authentication
6:Redirect to authentication Manager
failure url: login.jsp?hata=true
Giriş hatası 5:throws Authentication
www.java-egitimleri.com Exception 21
Başarılı Bir
Login Akışı
1:HTTP request ROLE_EDITOR
to editor.jsp
FilterSecurity
Interceptor editor.jsp
2:ExceptionTranlationFilter
Redirect to authentication 7:Redirect to targetUrl if
entry point: login.jsp found
3:Submit form 4:Try to
ksevindik to:/j_spring_security_ch UsernamePassword authenticate user
eck Authentication
**********
Filter
6:Store Authentication
Authentication Manager
7:Redirect to token
index.jsp defaultTargetUrl 5:Return
Authentication
SecurityContextHolder
token
www.java-egitimleri.com 22
Yetkilendirme
www.java-egitimleri.com 24
Yetkilendirmenin İşleyişi
Secured object tipine göre farklı AccessDecisionManager,
İnterceptor'ler vardır erişim yetkisi için Voter
nesnelerine danışır
SecuritytInterceptor
Access
Secured object'e *
AccessDecisionManager Decision
erişim Secured Voter
Object
Secured object'e Interceptor Authentication, ConfigAttributes,
erişim interceptor ve secured object üçlüsünü AccessDecisionManager'a iletir
tarafından yakalanır
SecurityContext
www.java-egitimleri.com 25
Yetkisiz Erişim Örneği
SecurityContext FilterSecurity
editor.jsp
PersistenceFilter Interceptor
3:ExceptionTranlationFilter
Authentication nesnesi Redirect to accessDenied page
HttpSession'dan alınıp
ThreadLocal Security
Context'e yerleştirilir
accessDenied.jsp
www.java-egitimleri.com 26
Namespace
Konfigürasyonu
Acegi Security’deki en büyük problem
bean’ların ugun biçimde ve sırada
tanımlanması idi
Spring Security 2.0 ile birlikte gelmiştir
Basit bir XML tanımı ile bir grup bean
konfigürasyonu ile yapılmak istenen
tanımlama yapılabilmektedir
www.java-egitimleri.com 27
Namespace
Konfigürasyonu
<security:ldap-server/> tanımı uygulama
içinde LDAP ayarlarının yapılması ve test
amaçlı embedded LDAP server’ın
çalıştırılması için yeterli olmaktadır
Geliştiriciler LDAP kabiliyetini kullanmak
için hangi bean tanımlarının yapılması,
hangi property değerlerinin set edilmesi
gerektiğini bilmek zorunda değildirler
www.java-egitimleri.com 28
Namespace ile
Spring Security Kullanımı
Form login konfigürasyonu
Logout işlemi
Kriptolu şifrelerin kullanılması
Beni hatırla kabiliyeti
Oturum yönetimi
Web kaynaklarının yetkilendirilmesi
Metot düzeyinde yetkilendirme
www.java-egitimleri.com 29
İletişim
Harezmi Bilişim Çözümleri
Kurumsal Java Eğitimleri
http://www.java-egitimleri.com
info@java-egitimleri.com
www.java-egitimleri.com 30