0 Tage Serie
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
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Service
public 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 here
return 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.