Spring Boot @PreAuthorize
ile Yetkilendirme İşlemleri
1. Spring Security’ye Giriş
Spring Security, web tabanlı uygulamalar için kapsamlı bir güvenlik framework’üdür. Kimlik doğrulama, yetkilendirme ve diğer güvenlik özelliklerini sağlar. Spring Boot ile kolayca entegre edilerek güvenli uygulamalar geliştirmek mümkün hale gelir.
2. Proje Kurulumu
Spring Initializr kullanarak bir Spring Boot projesi oluşturun ve gerekli bağımlılıkları ekleyin:
- Spring Web
- Spring Security
- Spring Data JPA (isteğe bağlı, kullanıcıları veritabanında yönetmek için)
3. Spring Security Konfigürasyonu
Spring Security konfigürasyonu için SecurityConfig
adında bir sınıf oluşturun ve gerekli ayarları yapın:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService() {
var userDetailsService = new InMemoryUserDetailsManager();
var user1 = User.withUsername("user")
.password("{noop}password")
.roles("USER")
.build();
var admin = User.withUsername("admin")
.password("{noop}admin")
.roles("ADMIN")
.build();
userDetailsService.createUser(user1);
userDetailsService.createUser(admin);
return userDetailsService;
}
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
4. Kullanıcı Rolleri ve Yetkileri
Kullanıcı rolleri ve yetkileri, kullanıcıların hangi işlemleri gerçekleştirebileceğini belirler. Örneğin, sadece “ADMIN” rolüne sahip kullanıcıların belirli bir servisi kullanabilmesini isteyebilirsiniz.
5. @PreAuthorize Anotasyonu ile Yetkilendirme
@PreAuthorize
anotasyonu, bir metodun çağrılmadan önce belirli bir yetkilendirme kontrolünden geçmesini sağlar. SpEL (Spring Expression Language) kullanarak yetkilendirme kuralları belirlenir.
Örnek:
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@PreAuthorize("hasRole('ADMIN')")
public void adminOnlyMethod() {
// Yalnızca ADMIN rolüne sahip kullanıcılar bu metodu çağırabilir
System.out.println("Admin method executed!");
}
@PreAuthorize("hasRole('USER')")
public void userOnlyMethod() {
// Yalnızca USER rolüne sahip kullanıcılar bu metodu çağırabilir
System.out.println("User method executed!");
}
}
7. Sonuç ve Öneriler
@PreAuthorize
anotasyonu, yöntem düzeyinde yetkilendirme kontrolleri gerçekleştirmenizi sağlar ve güvenliği artırır. Bu yöntem, özellikle mikroservis mimarisi gibi dağıtık sistemlerde oldukça kullanışlıdır.