Spring Boot @PreAuthorize ile Yetkilendirme İşlemleri

Abdurrahman Gazi DİŞ
Appcent
Published in
2 min readJun 27, 2024

--

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.

--

--

Abdurrahman Gazi DİŞ
Appcent

Java Developer @appcent || Linkedin: abdurrahman-gazi-dis