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
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 resourcereturn true;}@Overridepublic void setFilterObject(Object filterObject) {}@Overridepublic Object getFilterObject() { return null; }@Overridepublic void setReturnObject(Object returnObject) {}@Overridepublic Object getReturnObject() { return null; }@Overridepublic 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)").