În timp ce SecurityFilterChain securizează rutele HTTP la nivel de URL, adnotarea @PreAuthorize oferă o securitate profundă (Defense in Depth) direct pe metodele de business din stratul de Service sau Controller.
Utilizând expresii SpEL (Spring Expression Language), @PreAuthorize poate evalua roluri (hasRole('ADMIN')), autorități specifice sau chiar parametri ai metodei curente (de exemplu verificând dacă utilizatorul curent logat este proprietarul resursei pe care dorește să o modifice).
Exemplu: Activare Method Security și protecție @PreAuthorize cu SpEL
package ro.dexblog.demo.service;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;
@Configuration
@EnableMethodSecurity // Obligatoriu pentru activarea adnotărilor @PreAuthorize
class MethodSecurityConfig {}
@Service
public class DocumentService {
@PreAuthorize("hasRole('ADMIN')")
public void deleteAnyDocument(Long docId) {
System.out.println("Document șters de administrator: " + docId);
}
// Permis dacă are rolul MANAGER sau dacă este chiar autorul documentului:
@PreAuthorize("hasRole('MANAGER') or #authorUsername == authentication.name")
public void editDocument(Long docId, String authorUsername) {
System.out.println("Document editat de autorul legitim: " + authorUsername);
}
}
Întrebări & Exemple de Cod:
@PreAuthorize și @PostAuthorize în Spring SecurityAi o nelămurire despre utilizarea comenzii
@PreAuthorize și @PostAuthorize în Spring Securitysau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.