groupmanager komutları / Minecraft OP SkyBlock Plugin Paketi - ServerKurma - Bilişim Hizmetleri

Groupmanager Komutları

groupmanager komutları

Java tabanlı uygulamalarda güvenlik önlemlerinde kullanılan Spring Security nedir ile başlayıp kurulumu ve kullanımı detaylı örneklerle yer alıyor.

Spring Security nedir?

Spring framework kullanılarak geliştirilen doğrulama(Authentication), yetkilendirme(Authorization), şifreleme(Password Encoder) ve CSRF gibi güvenlik önlemleri sağlayan, Spring platformunda yer alan bir projedir.

Spring framework hakkında detaylı bilgi almak için Spring framework yazıma bakmalısın.

Kullanım kolaylığı, CSRF, Session Fixation gibi birçok güvenlik önleminin varsayılan olarak aktif gelmesi, farklı doğrulama, yetkilendirme ve şifreleme yöntemlerini desteklemesinden dolayı Spring Security de-facto standart haline gelmiştir.

Neden Spring Security?

Kullanıcılar uygulamalardan beklenen işlevin yanından kullanıcıların sahip olduğu yetkilere(yönetim, editör veya üye) göre işlem yapması istenebilir.

Uygulama bu ihtiyaç ile birlikte doğrulama, yetkilendirme ve saldırganın yetkileri elde ederek uygulama işlevini değiştirmesini önleme gibi güvenlik tedbirlerine gereksinim duyulur.

Her bir gereksinim içerisinde başka gereksinimlere ihtiyaç duyabilir.

Örneğin; Doğrulama sıradan bir dosyada yer alan kullanıcı bilgilerinin kontrolü, veritabanından kontrolü veya LDAP gibi protokollerden kontrolü olabilir.

Temel doğrulama ve yetkilendirmenin yanında saldırganlar sürekli olarak farklı saldırı yöntemleri kullanılarak güvenlik açıkları ortaya çıkarmaktadır.

Tüm bu güvenlik gereksinimleri uygulamadan beklenen işlevselliği yerine getirmek için kullanılan efor kadar efora neden olacaktır.

Spring Security doğrulama, yetkilendirme, şifreleme, güvenlik önlemlerini esnek, kolay ve sürekli olarak paketlerin güncellenmesi ile sağlar.

Spring Security kurulumu

Spring Security kullanım alanı, doğrulama ve yetkilendirme işlemine göre farklı paketlere(spring-security-core, spring-security-config, spring-security-web vb.) ayrılmıştır.

NOT: LDAP, OAuth gibi bazı paketler ek kütüphaneye ihtiyaç duyabilir.

Sıklıkla kullanıldığı ve geniş kullanım desteği sağladığı için web tabanlı uygulama paketi(spring-security-web) kullanılacaktır.

Maven içerisinde yer alan archetype özelliğini kullanarak web projesi oluşturalım.

Maven hakkında detaylı bilgi almak için Maven yazıma bakmalısın.

Spring Security Web ve Spring Security Config paketlerini pom.xml dosyasına eklenerek kurulumu tamamlayalım.

Spring Security Web, JCP tarafından belirlenen Servlet(JSR 369) gibi şartnameleri kullanır.

Her bir şartnameye ait paketin tek tek eklenmesi yerine JEE 8 paketinin projeye eklenmesi karmaşıklığı azaltacaktır.

Spring Security için gerekli olan modüller(spring framework, spring security core vb.) maven tarafından projeye eklenecektir.

Spring Security kullanımı

Spring Security web projelerinde güvenliği sağlamak için Servlet şartnamesinde yer alan Filter özelliğini kullanır.

Filtreleri aktif etmek için XML tabanlı(web.xml) veya Java tabanlı(AbstractSecurityWebApplicationInitializer) ayarlar kullanılabilir.

Spring Security filtrelerinin çalışması için Spring ve Servlet arasında köprü-bağlantı görevi gören DelegatingFilterProxy filtresi kullanılır.

ContextLoaderListener, DelegatingFilterProxy filtresinin Spring ile bağlantı kurarken ihtiyaç duyduğu WebApplicationContext(RootContext) oluşturmayı sağlar.

ContextLoaderListener varsayılan olarak XmlWebApplicationContext sınıfını kullanarak ayarları /WEB-INF/applicationContext.xml dosyasından alır.

Spring Framework ve Spring Security ayarlarını applicationContext.xml dosyasına aşağıdaki gibi yapmak yeterli olacaktır.

Okunabilirliğini arttırmak için xmlns değerine security tanımı yapılabilir.

XML kullanımı yazım hatalarına açık olduğu, derleme zamanında hataların ortaya çıkmadığından dolayı Servlet 3.0 ile birlikte gelen Java tabanlı ayarlar sıklıkla kullanılmaktadır.

Java tabanlı ayarlarda Spring MVC veya herhangi bir kütüphaneye ihtiyaç duymadan AbstractSecurityWebApplicationInitializer sınıfının kullanılması yeterli olacaktır.

Doğrulama, yetkilendirme, şifreleme ve diğer ayarların yapılması için WebSecurityConfigurerAdapter sınıfı kalıtım alınarak düzenlenir.

Spring Security kullanıcı giriş işlemlerinin yanında farklı güvenlik yöntemlerini sağlamak için @EnableWebSecurity ifadesini kullanır.

İfade içsel olarak Spring Security paketinde yer alan çeşitli sınıfları-filtreleri @Import ifadesi ile ekler.

Annotation hakkında detaylı bilgi almak için Java Annotations yazıma bakmalısın.

Proje WebSecurityConfigurerAdapter sınıfında belirlenen varsayılan ayarlara göre çalışacak ve doğrulama sağlayıcısı(AuthenticationProvider) verilmediğinden giriş işleminde hata mesajı verecektir.

XML ayarları(web.xml) kullanılmadan oluşturulan war dosyalarındaki uyarıyı gidermek için pom.xml dosyasına aşağıdaki ayarın eklenmesi gerekebilir.

WebSecurityConfigurerAdapter sınıfında yer alan configure metotları override-ezilerek Spring Security özelleştirilir.

Spring Security nasıl çalışır

Spring Security Web, Servlet şartnamesinde yer alan Filter özelliğini kullanarak güvenlik işlemlerini yapar.

Her Filter sınıfının aktif edilmesi için ayrıca Servlet Container(tomcat, jetty vb.) ile kayıt edilmesi gerekir.

Filtrelerin kayıt edilmesinin yanında Spring Security filtrelerinin çalışması için Spring framework IoC Container ile bağlantı kurulması gerekir.

Spring Security bu işlemi yapmak için FilterChainProxy sınıfını geliştirmiş daha sonra bu sınıf spring-web modülüne DelegatingFilterProxy olarak taşınmıştır.

Sıradan bir Servlet Filter olan DelegatingFilterProxy filtre işleminin yapıldığı adımda(doFilter) Servlet Context alanında yer alan WebApplicationContext sınıfını(ContextLoaderListener ile oluşturulan) kullanarak Spring Security filtrelerini Spring framework IoC Container ile oluşturur.

Filtreler Spring framework IoC Container ile oluşturulduğundan dolayı filtre içerisinde Spring framework tarafından sağlanan özellikleri kullanmayı sağlar.

Bu sayede her bir Servlet filtresinin ayrı ayrı eklenmesine gerek olmadan DelegatingFilterProxy üzerinden dinamik olarak oluşturulması sağlanır.

NOT:DelegatingFilterProxy sınıfı Delegation yöntemini kullanarak filtreleri FilterChainProxy üzerinden çalıştırır.

FilterChainProxy oluşturulan filtreleri(CsrfFilter, LogoutFilter vb.) sırasıyla çalıştırararak Spring Security işlemini yapmış oluyor.

NOT2: Filtreler Spring tarafından oluşturulacağı(nesne haline geleceği) için yapılan ayarlara göre filtre sayısı dinamik olarak değişecektir.

Authentication – Doğrulama

Doğrulama işlemlerinde in-Memory, JDBC, UserDetailsService, LDAP ve AuthenticationProvider yöntemleri yer alır.

in-Memory

Deneme/Test amaçlı olarak kullanılmaktadır.

NOT: Kullanıcı bilgileri uygulama çalıştığı sürece HashMap veri türünde saklanır.

JDBC

İlişkisel veritabanında yer alan bilgiler üzerinden doğrulama yapmak için JDBC doğrulama yöntemi kullanılır.

JDBC doğrulama yöntemi spring-jdbc modülü ve veritabanına ait sürücü/arabirim ile çalışır.

NOT: Spring Security ve Spring Framework modül sürümlerinin aynı olmasına dikkat edilmelidir.

JDBC ayarları JdbcUserDetailsManagerConfigurer sınıfı kullanılarak yapılandırılır.

Sınıf içerisindeki withDefaultSchema metodu varsayılan JDBC tablosunu oluşturur.

Varsayılan JDBC tablosu aşağıdaki dosyada yer alır ve sadece gömülü H2 veritabanı ile çalışır.

org/springframework/security/core/userdetails/jdbc/users.ddl

Aşağıdaki SQL komutları kullanılan veritabanı yönetim sistemine göre düzenlenerek varsayılan tablo ve sütunlar withDefaultSchema metoduna ihtiyaç olmadan kullanılabilir.

NOT: Veritabanı yönetim sistemine göre veri kaynağı (dataSource metodu) düzenlenmelidir.

in-Memory ve JDBC yöntemleri UserDetailsManager arayüzünün uygulamalarıdır.

UserDetailsManager arayüzü UserDetailsService arayüzünü kalıtarak kullanıcı işlemleri (createUser, updateUser, deleteUser vb.) yapmayı sağlar.

NOT: JDBC yöntemi UserDetailsService arayüzünü JdbcDaoImpl sınıfı ile sağlar.

AuthenticationManagerBuilder sınıfı doğrudan bu sınıflarda yer alan metotların kullanımını sağlamaz.

Metotları kullanabilmek için ayrı bir bean tanımı yapılabilir.

NOT: Metotların kullanımını göstermek amacıyla bean tanımı içerisinde metotlar kullanılmıştır.

UserDetailsManager arayüzünü uygulayan InMemoryUserDetailsManager Spring IoC bean olarak tanımlandığından Spring Framework otomatik bağlama özelliği ile kullanılabilir.

Kullanıcı işlemleri ayrıca geliştirme-kod yazımı yapılmadan, UserDetailsManager metotları üzerinden yapılmış olur.

JDBC yöntemi GroupManager arayüzünün uygulayarak grup işlemleri yapmayı sağlar.

Aşağıdaki SQL komutları kullanılan veritabanı yönetim sistemine göre düzenlenerek grup işlemleri yapılır.

Grup işlemleri (JdbcUserDetailsManager) bean tanımı yapılarak kullanılır.

JdbcUserDetailsManager sınıfı UserDetailsService, UserDetailsManager ve GroupManager arayüzünü uyguladığı için bu arayüze ait metotlara yukarıdaki gibi JdbcUserDetailsManager sınıfına ait bean tanımı üzerinden erişilebilir.

NOT: Bean geri dönüş değeri UserDetailsService veya UserDetailsManager kullanıldığında sadece belirtilen arayüze ait otomatik bağlama özelliği doğrudan kullanılır.

JDBC doğrulama yöntemi varsayılan tablo yapısının yanında özel tablo yapısını kullanmayı destekler.

NOT: Özel tablo yapısı uygulamaya göre değişiklik gösterebilir.

JDBC kullanıcı bilgilerini almak için usersByUsernameQuery metodu ile belirtilen sorguyu, kullanıcı yetkilerini almak için ise authoritiesByUsernameQuery ile belirtilen sorguyu kullanacaktır.

Kullanıcı şifresi ile veritabanında yer alan şifrenin karşılaştırılması için passwordEncoder metodu ile PasswordEncoder arayüzünü uygulayan şifreleme yöntemi kullanılır.

Örnekte herhangi bir şifreleme kullanılmadığı için NoOpPasswordEncoder sınıfı kullanılmıştır.

Şifreleme yöntemi MD5, SHA1 gibi hash tabanlı şifreleme yöntemi kullanıyorsa Spring Security paketinde yer alan sınıflar kullanılabilir.

  • MD4 – org.springframework.security.crypto.password.Md4PasswordEncoder()
  • MD5 – org.springframework.security.crypto.password.MessageDigestPasswordEncoder(“MD5”)
  • SHA-1 – MessageDigestPasswordEncoder(“SHA-1”)
  • SHA-256 – MessageDigestPasswordEncoder(“SHA-256”)
  • vb.

NOT: Hash şifreleme yöntemi yerine hash ile birlikte salt tabanlı şifreleme sağlayan bcrypt, argon2, pbkdf2, scrypt yöntemlerinin kullanımı faydalı olacaktır.

JdbcUserDetailsManager sınıfında yer alan metotlar kullanılarak kullanıcı ve grup işlemlerinde kullanılan SQL komutları düzenlenebilir.

NOT: Spring Security tarafından sağlanan varsayılan tablo yapısının kullanımı önerilir.

UserDetailsService

Kullanıcı ve şifre bilgilerini farklı veri kaynağından almak için UserDetailsService arayüzü kullanılır.

Arayüz kullanıcı adını loadUserByUsername metoduna parametre olarak göndererek UserDetails arayüzünü uygulayan bir sınıf döndürmesini bekler.

UserDetailsService arayüzünün kullanarak metin belgesinde yer alan kullanıcı bilgilerini doğrulayalım.

Aşağıdaki bilgileri resources dizinine users.txt olarak kayıt edelim.

Arayüzü uygulayan sınıfı hazırlayalım.

Sınıf loadUserByUsername metoduna gönderilen kullanıcı bilgisini users.txt dosyasından alarak UserDetails arayüzünü uygulayan User sınıfını döndürecektir.

Sınıfın örneği AuthenticationManagerBuilder#userDetailsService metoduna parametre olarak gönderilip kullanılır.

NOT: Şifreleme yöntemi kullanılmadığından NoOpPasswordEncoder kullanılmıştır.

Kullanıcı adı ve şifre bilgilerinin farklı veri kaynağına saklandığı durumlarda UserDetailsService sıklıkla(özellikle Spring Data ile birlikte) kullanılmaktadır.

Spring Data hakkında detaylı bilgi almak için Spring Data yazıma bakmalısın.

NOT: in-Memory ve JDBC yöntemleri UserDetailsService arayüzünün uygulamalarıdır.

NOT2:UserDetailsService arayüzü DaoAuthenticationProvider doğrulama sağlayıcısı tarafından yönetilir/kullanılır.

AuthenticationProvider

Spring Security erişim bilgilerini doğrulamak için kullanıcı adı ve şifre, üst bilgi (header), merkezi doğrulama gibi farklı doğrulama yöntemlerini destekler.

Doğrulama yöneticisi ilgili filtre adımında, doğrulama yönteminin çalışması için gereken parametreler sağlandığında doğrulama işlemini yapar.

Doğrulama işlemi AuthenticationManager arayüzünü uygulayan ProviderManager sınıfı tarafından yönetilir.

ProviderManager doğrulama işlemlerini yapmak için doğrulama sağlayıcılarını (AuthenticationProvider) sırasıyla çalıştırarak doğrulamayı yapar.

Kullanıcı adı ve şifre doğrulama için DaoAuthenticationProvider, LDAP servisi için LdapAuthenticationProvider, SAML yöntemine göre doğrulama için OpenSamlAuthenticationProvider gibi sınıfları/doğrulama sağlayıcıları kullanır.

Doğrulama sağlayıcısı doğrulama işlemini başarıyla tamamladığında erişim bilgilerinin yer aldığı Authentication-Principal arayüzünü uygulayan bir sınıf oluşturur.

Erişim bilgilerine Spring Security ile erişimek için SecurityContextHolder#getContext, SecurityContext#getAuthentication adımları kullanılır.

NOT: Erişim bilgilerine farklı yöntemlerle(Spring Security, Servlet-Principal) erişilebilir.

Kullanılan doğrulama yöntemine göre doğrulama sağlayıcısının çalışması farklılık gösterir.

Örneğin; Bir önceki başlıkta yer alan UserDetailsService arayüzü kullanıcı bilgilerini veri kaynağından alarak veri kaynağındaki şifreyi girilen şifre ile PasswordEncoder arayüzü üzerinden karşılaştırarak doğrulama yapar.

LDAP gibi kullanıcı bilgilerine erişimin olmadığı durumlarda UserDetailsService veya DaoAuthenticationProvider bilgilere erişemediği için doğrulama işlemini yapamayacaktır.

Kullanıcı bilgilerine erişimin olmadığı doğrulama yönteminde AuthenticationProvider arayüzü kullanılabilir.

AuthenticationException sınıfını kalıtım alan BadCredentialsException, DisabledException gibi sınıflar kullanılarak doğrulama hatası ile ilgili detaylı bilgi verilebilir.

NOT: Saldırganların güvenliği aşmasının önüne geçmek için detaylı bilgi verilmesi tavsiye edilmez.

Sınıf örneği AuthenticationManagerBuilder#authenticationProvider metoduna parametre olarak gönderilerek

veya bean tanımlaması yapılarak kullanılır.

AuthenticationProvider#authenticate metoduna parametre olarak gönderilen sınıf UsernamePasswordAuthenticationFilter filtresi tarafından sağlanır.

Filtreler

UsernamePasswordAuthenticationFilter filtresi form kullanılarak gönderilen kullanıcı adı ve şifre bilgilerinin yer aldığı UsernamePasswordAuthenticationToken sınıfını oluşturarak AuthenticationProvider#authenticate metoduna iletir.

Spring Security farklı doğrulama yöntemlerini filtreler kullanarak sağlar.

Örneğin; HTTP isteği sırasında gönderilen üst bilgi (header) içerisinde yer alan bilgiyi kullanarak doğrulama yapan Basic Authentication doğrulama yönteminin çalışması için gerekli olan bilgiler BasicAuthenticationFilter filtresi tarafından sağlanır.

Filtre ve doğrulama sağlayıcısı özelliği kullanılarak JWT, OAuth veya özel doğrulama yöntemi geliştirilebilir.

LDAP

Kurumsal veya belirli bir sayıdan fazla kişinin çalıştığı yerlerde doğrulama, yetkilendirme gibi bilgiler LDAP protokolü kullanılarak saklanır.

Spring Security LDAP protokolünü AuthenticationManagerBuilder#ldapAuthentication metodu LdapAuthenticationProviderConfigurer sınıfı üzerinden düzenlemeyi sağlar.

LDAP protokolünü kullanabilmek için Spring Security LDAP paketinin pom.xml eklenmesi gerekir.

LDAP protokolü esnek ve geniş yapılandırmaya sahip olduğundan ayarlar kullanılan sisteme göre farklılık gösterebilir.

Spring Security gömülü LDAP sunucusu oluşturmak için kullanılan UnboundID ve ApacheDS kütüphanelerini destekler.

Gömülü LDAP sunucusu oluşturmak için kütüphaneye ait paketin pom.xml dosyasına eklenmesi yeterli olacaktır.

LDAP bilgileri IETF tarafından RFC 2849 ile belirtilen nitelik-attribute olarak belirli bir şema-schema kullanarak ldif dosyasında saklanır.

Aşağıdaki bilgileri resources dizinine ldif uzantılı dosya olarak kayıt edelim.

NOT: Hızlıca ldif dosyası oluşturmak için LDIFGenerator kullanmak faydalı olacaktır.

Gömülü LDAP sunucusu için gerekli ayarları yapalım.

LdapAuthenticationProviderConfigurer sınıfı gömülü LDAP sunucusunu resources dizininde yer alan ldif uzantılı dosya bilgilerine bakarak oluşturacaktır.

Yukarıda yer alan userDnPatterns kullanıcı bilgisini aramak için kullanılacak ifadeyi, contextSource LDAP context bilgilerini(url, port, root) ayarlamayı sağlar.

NOT: Root bilgisi verilmediğinde varsayılan olarak dc=springframework,dc=org kullanılacaktır.

LDAP bilgisine göre LdapAuthenticationProviderConfigurer metotları kullanılarak ayarlar özelleştirilebilir.

LDAP bir protokol olduğundan Active Directory gibi bazı uygulamaları tam olarak LDAP kurallarını uygulamayabilir veya farklı kullanımı sahiptir.

Aşağıdaki örnek Active Directory LDAP sunucu işlemleri için kullanılabilir.

Spring Security Active Directory tarafından sağlanan özel hata gibi özellikleri destekleyen AuthenticationProvider arayüzünün bir uygulaması olan ActiveDirectoryLdapAuthenticationProvider sınıfına sahiptir.

Sınıf bean tanımı yapılarak aşağıdaki gibi kullanılabilir.

NOT: Mevcut LDAP ayarlarının öğrenilmesinde görsel araçların kullanımı faydalı olacaktır.

Spring Security varsayılan olarak sağladığı doğrulama hizmetleri, genişletilebilir doğrulama sağlayıcısı (AuthenticationProvider), kullanıcı servisi (UserDetailsService) ile farklı veya özel doğrulama servislerini oluşturmayı, kullanmayı sağlar.

PasswordEncoder – Şifreleme

Veri kaynağına saklanan kullanıcı bilgilerinin saldırganlar tarafında ele geçirilmesinin önüne geçmek için bilgilerin şifrelenmesi yöntemi kullanılır.

Şifreli bilgilerin girilen bilgiler ile karşılaştırılması için girilen bilgilerin şifrelenerek şifreli bilgiyle karşılaştırılması gerekir.

Spring Security PasswordEncoder arayüzü ve arayüzü uygulayan sınıflar ile farklı şifreleme yöntemlerini destekler.

Düz metin için NoOpPasswordEncoder, MD5 için MessageDigestPasswordEncoder gibi sınıflar yer alır.

Düz metin ve hash tabanlı şifreleme çeşitli yöntemlerle ele geçirilebildiği için Hash şifreleme ile birlikte salt olarak adlandırılan hash şifrelerine ön ve son ek ekleyerek kullanılan şifreleme yöntemleri tavsiye edilmektedir.

Daha önceden şifrelenmiş verileri farklı veri şifreleme formatına çevirme imkanı olmadığından Spring Security farklı şifreleme yöntemlerini sağlamak için DelegatingPasswordEncoder sınıfını sağlar.

Sınıf kullanılacak şifreleme yöntemlerini aşağıdaki gibi yapılandırarak oluşturulur ve kullanır.

Daha önceden kullanılan şifrelemenin önüne ön ek olarak {noop}, {MD5} gibi değerlerin eklenmesi gerekir.

NOT: Şifreleme yöntemini yukarıdaki gibi tanımlamak yerine PasswordEncoderFactories#createDelegatingPasswordEncoder metodu kullanılabilir.

Authorization – Yetkilendirme

Spring Security rol temelli yetkilendirme yapmaya, çeşitli ayarlar yaparak sayfalara, metotlara veya sayfanın bir bölümüne erişmeye imkan verir.

Spring Security varsayılan olarak WebSecurityConfigurerAdapter#configure metodu ile sadece giriş yapmış kullanıcıların erişimine izin verir.

Yetkilendirme işlemi authorizeRequests metodu ile aşağıdaki gibi düzenlenebilir.

Kullanılan metotlar ve karşılıkları aşağıdaki gibidir.

  • antMatchers – ant biçiminde adres eşleşmesi yapar
  • mvcMatchers – Spring MVC paketi ile antMatchers metoduna göre daha kesin ifadeler
  • regexMatchers – düzenli ifade ile adres eşleme
  • hasRole – role sahip, hasAuthority ile benzer
  • hasAuthority – yetkiye sahip, hasRole ile benzer
  • hasAnyRole – herhangi bir role sahip, hasAnyAuthority ile benzer
  • hasAnyAuthority – herhangi bir yetkiye sahip, hasAnyRole ile benzer
  • permitAll – erişime izin ver
  • denyAll – erişimi engelle
  • authenticated – giriş yapmış kullanıcılara izin ver
  • anonymous – anonim kullanıcılara izin ver
  • rememberMe – beni hatırla ile giriş yapan kullanıcılara izin ver
  • fullyAuthenticated – sadece giriş yapan kullanıcılar (beni hatırla girişlere izin vermez)
  • hasIpAddress – sadece belirli ip adresine sahip kullanıcılara izin ver
  • access – parametre olarak gönderilen (Expression) ifadeyi sağlayan kullanıcılara izin ver
    • örnek access parametresi; hasRole(‘admin’) and hasIpAddress(‘88.168.1.0/24’)

Metot temelli yetkilendirme

Spring Security sağladığı sayfa temelli yetkilendirmenin yanında metot temelli veya programsal temelli yetkilendirmeyi sağlar.

Metot temelli yetkilendirme temel olarak aşağıda yer alan Java Annotations ifadelerinin kullanımından ibarettir.

  • @Secured
  • @RolesAllowed – JSR-250
  • @PreAuthorize
  • @PreFilter
  • @PostAuthorize
  • @PostFilter

Metot temelli ifadelerin aktif olması için @EnableGlobalMethodSecurity ifadesi ile etkileştirilmesi gerekir.

NOT: Kullanılan ifadye göre @Secured için securedEnabled, @RolesAllowed için jsr250Enabled ve diğerleri için prePostEnabled değerinin true olması gerekir.

İfade proje içerisinde yer alan metot içerisinde kullanılır.

Spring Security tarafından sağlanan @Secured yerine JSR-250 şartnamesi ile sağlanan @RolesAllowed ifadesi kullanılabilir.

Diğer ifadeler @Secured ve @RolesAllowed ifadelerinden farklı olarak metot çalıştırılmadan veya çalıştırıldıktan sonra Spring Security tarafından sağlanan Expression-Language olarak adlandırılan ifadelerin kullanımını destekler.

İfadelerin önemli bir özelliği ise metot parametrelerini kullanarak işlem yapabilmesidir.

Yukarıdaki örnekte parametre olarak gönderilen nesnenin name alanı ile giriş yapan kullanıcının name alanı aynı ise metot çalışacaktır.

Özellik Spring Data tarafından sağlanan @Param ile birlikte aşağıdaki gibi çalışabilir.

@PreFilter ve @PostFilter ifadeleri parametre olarak gönderilen koleksiyon, dizi veya stream değerlerini belirtilen ifadeye göre filtrelemek için kullanılır.

Büyük veriler üzerinde işlem yaparken performans kaybına neden olduğundan kullanımı tavsiye edilmemektedir.

Metot temelli yetkilendirme işlemi sonrası yetkisiz olarak metoda erişildiğinde Spring Security içsel olarak istisna fırlatacak ve HTTP 403 hatası verecektir.

Spring Security tarafından oluşan istisnayı yönetmek, farklı bir sayfa göstermek için HttpSecurity sınıfında yer alan exceptionHandling metodu ile elde edilen ExceptionHandlingConfigurer sınıfında yer alan metotlar kullanılarak özelleştirilebilir.

NOT: Metot temelli yetkilendirme sadece Spring IoC tarafından oluşturulan sınıf metotlarında kullanılması ve her metot için ayrıca belirtilmesi gerektiğinden AOP gibi yöntemlerle daha esnek bir şekilde kullanılabilir.

Customization – Özelleştirme

Spring Security sağladığı geniş doğrulama, yetkilendirme ve şifreleme özelliklerinin yanında kullanıcı giriş sayfası, beni hatırla, cors, csrf gibi ayarları özelleştirmeyi sağlar.

Kullanıcı girişini özelleştirme

Kullanıcı adı ve şifre yöntemine göre giriş formu varsayılan olarak Spring Security tarafından oluşturulur.

Varsayılan giriş formunu özelleştirmek için http.formLogin metodu üzerinden elde edilen FormLoginConfigurer sınıfı kullanılır.

Sınıf varsayılan olarak kullanıcı adı alanı için username, kullanıcı şifre alanı için password parametrelerini kullanır.

Varsayılan kullanıcı alanını değiştirmek için usernameParameter metodu, kullanıcı şifre alanını değiştirmek için passwordParameter metodu kullanılır.

Değişiklik sonrası görünümde bir değişiklik olmayacak üretilen HTML kodlarındaki alanlar ve Spring Security işlemleri değişecektir.

Spring Security tarafından olarak oluşturulan form görünümünü ve adresi (/login) özelleştirmek için loginPage metodu kullanılır.

Belirlenen ayara göre /giris adresinde yer alan formda kullaniciadi, kullanicisifre ve CSRF alanı olması gerekir.

Form sayfasında hatalı giriş için ?error parametresi, giriş yaptıktan sonra çıkış yaptığında ?logout parametresi kontrol edilerek mesaj verilebilir.

Varsayılan olarak aktif gelen CSRF bilgisine ulaşmak içim _csrf kullanılır.

NOT: CSRF değeri/alanı gönderilmediğinde/olmadığında giriş yapılmayacaktır.

Tavsiye edilmemesi rağmen CSRF değerini devre bırakmak için csrf().disable() metodu kullanılabilir.

NOT: CsrfConfigurer sınıfında yer alan metotlar kullanılarak CSRF işlemi özelleştirilebilir.

Giriş işlemi varsayılan olarak loginPage metodu ile belirtilen adresin POST yöntemine göre çağrılmasıyla olacaktır.

Varsayılanı değiştirmek için loginProcessingUrl metodu ve form etiketinin action özelliğinin değiştirilmesi yeterli olacaktır.

Hatalı girişler loginPage metodu ile belirtilen adrese ?error parametresi eklenerek yönlendirilecektir.

Başarılı girişler uygulamanın kök dizinine yönlenecektir.

Hatalı ve başarılı girişleri farklı sayfalara yönlendirmek için failureUrl ile defaultSuccessUrl metotları kullanılabilir.

Spring Security hatalı giriş türüne göre işlem yapmak için failureHandler metodunu, kullanıcı bilgisine göre başarılı giriş işlemini yapmak için successHandler metotları kullanılabilir.

AuthenticationFailureHandler ve AuthenticationSuccessHandler arayüzleri tek metoda sahip olduğundan Java 8 ile gelen Lambda ifadeleri kullanılabilir.

Çıkış işlemini özelleştirme

Kullanıcı çıkış işlemi Spring Security tarafından /logout adresi üzerinden yapılır.

Varsayılan giriş formunu özelleştirmek için http.logout metodu üzerinden elde edilen LogoutConfigurer sınıfı kullanılır.

Çıkış işlemi özelleştirilerek çıkış işlemini kayıt altına alma(loglama) gibi işlemler yapılabilir.

Beni hatırla özelleştirme

Kullanıcılar giriş yaptıktan ve tarayıcılarını kapattıktan sonra doğrulama bilgileri silinecektir.

Beni hatırla özelliği belirlenen bir süre kadar kullanıcıların tarayıcılarını kapatsalar bile cihazlarında saklanan bilgiler (çerez-cookie) üzerinden erişimini sağlar.

Beni hatırla özelliğini aktif etmek için http.rememberMe() metodu kullanılır.

Beni hatırla özelliğini özelleştirmek için http.rememberMe metodu üzerinden elde edilen RememberMeConfigurer sınıfındaki metotlar kullanılır.

Varsayılan olarak beni hatırla bilgileri çerez-cookie’de (kullanıcı cihazında yer alan dosyalarda) saklanır.

Kullanıcı cihazında yer alan çerezi saldırgan ele geçirerek şifrelenmiş bilgiye ulaşılabilir.

Çerezlerin saldırgan tarafından alınarak bilgilere erişimin önüne geçmek için token temelli yöntem kullanılabilir.

Token temelli yöntemde kullanıcı giriş yaptığında giriş yapan kullanıcı bilgileri veritabanında saklanır.

Kullanıcı saklanan bilgilere doğrudan erişemez, sadece cihazına çerez ile saklanan token sayesinde bu bilgileri giriş yapmak için kullanılmasını sağlar.

InMemoryTokenRepositoryImpl token bilgilerini Java Map koleksiyonunda uygulama çalıştığı sürece saklar.

NOT: in-Memory test/deneme amçlı kullanılmaktadır.

JdbcTokenRepositoryImpl token bilgilerini JDBC kullanarak ilişkisel veritabanında saklamak için kullanılır.

Farklı veri kaynaklarını kullanmak için PersistentTokenRepository arayüzü kullanılabilir.

Beni hatırla özelliğini kullanırken çerez adı, çerez sonlanma tarihi, çerez domain bilgisi, sadece https isteklerinde aktif olma gibi kısıtlamaların eklenmesi faydalı olacaktır.

NOT: Beni hatırla özelliğinin kullanımı gerekmedikçe tavsiye edilmemektedir.

CSRF özelleştirme

Varsayılan olarak aktif gelen CSRF özelliğini devre dışı bırakmak için CsrfConfigurer sınıfında yer alan disable metodu kullanılır.

Sadece belirli bir adreste devre dışı bırakmak için ignoringAntMatchers metodu kullanılabilir.

Belirli bir isteğe göre devre dışı bırakmak için ignoringRequestMatchers metodu kullanılabilir.

Yukarıdaki örnekte X-Requested-With değeri XMLHttpRequest olan istekte CSRF devre dışı kalacaktır.

Sadece belirli bir istek için aktif etmek için requireCsrfProtectionMatcher metodu kullanılabilir.

Yukarıdaki örnekte X-Requested-With değeri XMLHttpRequest olmayan istekte CSRF aktif olacaktır.

NOT: CSRF güvenlik önleminin devre dışı bırakılması tavsiye edilmemektedir.

CORS özelleştirme

CORS özelliğini devre dışı bırakmak için CorsConfigurer sınıfında yer alan disable metodu kullanılır.

CORS özelleğini özelleştirmek için CorsConfiguration sınıfındaki metotlar kullanılarak özelleştirilmesi, configurationSource metoduna parametre olarak gönderilmesi veya bean tanımının yapılması yeterli olacaktır.

Spring Security ile birlikte Spring MVC kullanıldığında, Spring MVC CORS özelliğini yönetecektir.

Diğer özelleştirmeler

Spring Security sağladığı özellikleri özelleştirmek için HttpSecurity sınıfındaki metotlar üzerinden elde edilen metotlar kullanılabilir.

Servlet desteği

Spring Security Servlet temelli olarak çalıştığından Servlet tarafından sağlanan yetkilendirme özelliklerini kullanabilir ve destekler.

Kullanıcı bilgilerine HttpServletRequest arayüzünde yer alan getUserPrincipal veya getRemoteUser metodu üzerinden erişim sağlanır.

Kullanıcı girişini kontrol etmek için authenticate metodu kullanılır.

Kullanıcı rollerine erişmek için isUserInRole metodu kullanılır.

Çıkış yapmak için logout metodu kullanılır.

Çıkış işlemi sonrası, sayfayı yönlendirmek faydalı olackatır.

Giriş yapmak için login metodu kullanılır.

Oturumu bilgisini değiştirmek için changeSessionId metodu kullanılır.

Servlet tabanlı uygulamaların Spring Security ile sıkı bağlı olmasını engellemek için Servlet tarafından sağlanan özelliklerin kullanımı faydalı olacaktır.

Spring MVC desteği

Spring Security kurulumu başlığında yer alan AbstractSecurityWebApplicationInitializer soyut sınıfını kurucu ile kullanmak hataya neden olacaktır.

Spring MVC ile birlikte Spring Security kullanmak için sınıfın kurucusuz olarak eklenmesi gerekir.

Spring Security ayarları Spring MVC ile yüklenerek kurulum tamamlanır.

Spring MVC, Spring Security tarafından sağlanan CORS, CSRF gibi birçok güvenlik özelliğini otomatik olarak aktif eder.

Spring Security yetkilendirme için kullanılan antMatchers metodunda daha hassas mvcMatchers kullanımını sağlar.

Spring MVC /admin eşleşmesi yerine aynı adrese-metoda /admin.html gibi bir eşlemeyi yaptığında antMatchers/admin.html adresine izin verirken mvcMatchers metodu izin vermeyecektir.

@AuthenticationPrincipal

Spring MVC AuthenticationPrincipalArgumentResolver sınıfı sayesinde kullanıcı bilgilerini i eşlemeyi sağlar.

Kullanıcı bilgilerine ulaşmak için @AuthenticationPrincipal ifadesi ve kullanıcı bilgilerinin yer aldığı sınıf(User) kullanılır.

Spring MVC kullanıcı bilgilerini almak için Authentication#getPrincipal() metodu sonucu oluşan sınıfı kullanır.

Metot dönüş değeri dinamik olduğundan dolayı UserDetails arayüzünü uygulayan özel-farklı sınıf kullanılabilir.

Spring MVC tarafından sağlanan JSP etiketleri Spring Security tarafından sağlanan CSRF özelliğini dinamik olarak sağlar.

JSP etiket desteği

Spring Security Web, Servlet temelli olarak çalıştığı için Servlet desteğinin yanında JSP desteğini de sağlar.

Spring Security SecurityContextHolder sınıfı üzerinden kullanıcı bilgilerine ulaşılabilir.

JSP etiketleri ile kullanıcı bilgileri erişmek için request nesnesi kullanılabilir.

JSP EL ile kullanıcı bilgilerine erişmek için pageContext nesnesi kullanılabilir.

Java JSP hakkında detaylı bilgi almak için Java JSP yazıma bakmalısın.

Spring Security içerisinde yer alan JSP etiketleri kullanıcı bilgilerini almayı, sayfadaki bölümlerin sadece belirtilen şartı sağlayan kullanıcı tarafından görünmesi sağlanır.

Etiketlerin kullanabilmesi için Spring Security JSP etiketlerine ait paketin pom.xml dosyasına eklenmesi gerekir.

Etiketleri kullanmak için aşağıdaki taglib direktifini belirtmek yeterli olacaktır.

authentication etiketi

Kullanıcı bilgilerine (Authentication örneğine) erişim için kullanılır.

authorize etiketi

Etiket içerisinde yer alan bölümü sadece access etiketi ile belirtilen (Expression) şartı sağlayan kullanıcıların görebileceği içerikler için kullanılır.

Etiketin diğer önemli özelliği ise url özelliği sayesinde belirtilen url’ye erişime olan kullanıcıların belirtilen bölümü görmesidir.

csrfInput etiketi

Farklı sayfalardan gönderilen istekleri önlemek için kullanılan CSRF güvenlik önlemi için CSRF değerinin yer aldığı gizli giriş(input) etiketi oluşturur.

Etiket form hazırlarken kolaylık sağlar.

csrfMetaTags etiketi

CSRF güvenliğini sağlamak için meta etiketi oluşturur.

HTML etiketlerini kullanmak yerine JSP etiketlerini kullanmak olası hataları önleyeceğinden kullanımı faydalı olacaktır.

Thymeleaf gibi görüntüleme motorları (template-view engine) benzer işlemleri yapan etiketlere sahiptir.

Diğer

Spring Security sağladığı geniş, esnek ve genişletilebilir güvenlik yapısı sayesinde varsayılan olarak gelen güvenlik özelliklerini özelleştirmeyi, yeni güvenlik yöntemleri geliştirmeyi sağlar.

Form girişi gibi temel güvenlik yöntemlerini yapmak kolay olsa da diğer güvenlik önlemleri, güvenlik önleminin doğası gereği karmaşık olabilir.

Karmaşık/Diğer güvenlik önlemlerini almak için öncelikle güvenlik önleminin çalışması ile ilgili detaylı bilgi almak faydalı olacaktır.

Spring Security detaylı hata, istisna mesajlarını saldırganların güvenlik önlemleriyle ilgili bilgi almasının önüne geçmek için gizlemektedir.

Detaylı hata, istisna mesajlarına erişmek için günlük(log) kayıtlarına bakmak veya uygulamayı DEBUG modunda çalıştırarak adım adım takip etmek faydalı olacaktır.

Uygulama geliştirirken JCP ve JEE tarafından belirlenen standartları kullanmak platform değişikliği, beklenmedik değişikliklere karşı faydalı olacaktır.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

 

GroupManager rehber.

Sık sorulan sorular:

GroupManager files(dosya) dizini:

GroupManager yetki eklenme ve kullanma şablonu(metni):
Örnek vermek gerekirsek;

Bir grubun bütün yetkilere veya izinlere erişmesini istiyorsanız;

Bir grubun, bir pluginin bütün komutlarına erişmesini istiyorsanız;

Bir grubun belirttiğim komut dışında bütün komutlara erişebilmesini istiyorsanız; Önüne "-" eklerseniz o yetkiyi dahil etmeyecektir.

Açıklamak gerekirsek;Admin kitinin dışında bütün kitleri alabilecektir.

Farklı dünyalarda yetki vermek:

Config ayarlaması:

1-) Grup oluşturma



2-) Var olan grubu silme komutu



3-) Gruptan gruba yetkileri aktarma
2.gruptaki yetkileri 1.gruba aktarır.



4-) Grubun ön ekini (prefix)'ini ayarlama



5-) Var olan gruba yetki ekleme



6-) Var olan gruptan yetki silmek



7-) Kişiye grup vermek



8-) Kişinin grubunu silmek



9-) Bütün grupları görmek



10-) Grup yetkilerini görmek için



11-) Grup ön ek (prefix) ve sonraki ön ek (suffixlerini) görüntülemek



12-) Kişiye bireysel veya özel yetki eklemek



13-) Kişiye bireysel veya özel eklenmiş yetkiyi silmek



14-) Kişiye bireysel ve özel eklenmiş tüm yetkileri silmek



15-) Pluginin config dosyasını yenilemek



Örnek config dosyası:

Okuma Şekli:
İlk Satır: Komut
İkinci Satır: Permission(Yetkisi)

Groupmanager Oyun Ici Komutlari ve Yetkileri:
Kullanici Yonetimi:

/manuadd: Bir oyuncuyu bir yetki grubuna atmak.
groupmanager.manuadd

/manudel: Bir oyuncuyu yetki grubundan atmak. Oyuncuyu varsayilan olarak ayarlanmis gruba atar.
groupmanager.manudel

/manuaddsub: Oyuncuya bir Sub-Group ekler.
groupmanager.manuaddsub

/manudelsub: Eklenmis olan Sub-group u siler.
groupmanager.manudelsub

/manpromote: Oyuncuyu yetki agacinda bir ust rutbeye cikarir.
groupmanager.manpromote

/mandemote: Yetki agacindan bir alttaki gruba dusurur.
groupmanager.mandemote

/manwhois: Oyuncunun hangi grupta bulundugunu soyler.
groupmanager.manwhois

/manuaddp: Oyuncuya bir yetkiyi ekler.
groupmanager.manuaddp

/manudelp: Oyuncudan bir yetkiyi siler.
groupmanager.manudelp

/manulistp: Oyunun sahip oldugu tum yetkileri listeler.
groupmanager.manulistp

/manuaddv: Oyuncuya bir degisken atar. Prefix veya Suffix kullanilabilir.
groupmanager.manuaddv

/manudelv: Kullanicidan bir degiskeni siler.
groupmanager.manudelv

/manulistv: Oyuncunun tum degiskenlerini listeler.
groupmanager.manulistv

/manload: Oyun Dışından Yaptığınız Bir Ayarı Oyun İçine Geçirmek İçin Kullanılır.

/listgroups: Oyunda ki grupları gösterir.

Yeni bir dünya açtınız ve oyuncular bir şey kıramıyor ise: Plugins>GroupManager>World>World>Groups.Yml ve Users.Yml dosyalarını kopyalayıp: Plugins>GroupManager>World>YeniAçtıgınızDünyaİsmi dizinine yapıştırıp,Konsoldan ve ya oyun içinden "/manload" komutunu kullanın.

  • 6 Bu dökümanı faydalı bulan kullanıcılar:

nest...

batman iftar saati 2021 viranşehir kaç kilometre seferberlik ne demek namaz nasıl kılınır ve hangi dualar okunur özel jimer anlamlı bayram mesajı maxoak 50.000 mah powerbank cin tırnağı nedir