0 Tage Serie
java / expert
Snippet

Erweiterung der Methodensicherheit mit benutzerdefinierten SpEL-Ausdrücken

Durch die Erweiterung von SecurityExpressionRoot können benutzerdefinierte domänenspezifische SpEL-Funktionen (wie isResourceOwner) definiert werden, die direkt in @PreAuthorize-Annotationen verwendet werden können, wodurch komplexe Autorisierungslogik zentralisiert wird.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class CustomSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
public CustomSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
public boolean isResourceOwner(Long resourceId) {
// Logic to check if the current user owns the specific resource
return true;
}
@Override
public void setFilterObject(Object filterObject) {}
@Override
public Object getFilterObject() { return null; }
@Override
public void setReturnObject(Object returnObject) {}
@Override
public Object getReturnObject() { return null; }
@Override
public Object getThis() { return this; }
}
spring
Erklärung
1
extends SecurityExpressionRoot
Erbt grundlegende Sicherheitsauswertungslogik wie hasRole() und isAuthenticated().
2
implements MethodSecurityExpressionOperations
Erforderliches Interface für die Auswertung von Ausdrücken an Methoden.
3
public boolean isResourceOwner(Long resourceId)
Benutzerdefinierte SpEL-Funktion, zugänglich über @PreAuthorize("isResourceOwner(#id)").