java / expert
Snippet
Dynamische Methodensicherheit mit SpEL-Ausdrücken
Spring Security ermöglicht eine feingranulare Zugriffskontrolle mithilfe der Spring Expression Language (SpEL). Durch Referenzierung benutzerdefinierter Beans in @PreAuthorize können komplexe Autorisierungsregeln externalisiert und wiederverwendet werden.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Servicepublic class DocumentService {@PreAuthorize("@securityService.isOwner(#id) or hasRole('ADMIN')")public Document getDocument(Long id) {return repository.findById(id).orElseThrow();}}@Component("securityService")public class SecurityService {public boolean isOwner(Long id) {String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();// Database check logic herereturn true;}}
spring
Erklärung
1
@PreAuthorize("@securityService.isOwner(#id) ...")
Verwendet SpEL, um vor der Methodenausführung eine Methode auf einer Spring-Bean aufzurufen.
2
SecurityContextHolder.getContext().getAuthentication()
Greift auf die Details des aktuell authentifizierten Benutzers aus dem Sicherheitskontext zu.
3
or hasRole('ADMIN')
Standardmäßiger Spring-Security-Ausdruck, kombiniert mit benutzerdefinierter Logik durch logische Operatoren.