java / intermediate
Snippet
Auswertung hierarchischer Rollenberechtigungen mit Methodensicherheitsausdrücken
Methodensicherheitsausdrücke in Spring Security ermöglichen eine feingranulare Zugriffskontrolle mithilfe der Spring Expression Language (SpEL). Durch das Registrieren einer RoleHierarchy-Bean im DefaultMethodSecurityExpressionHandler erben übergeordnete Rollen implizit die Berechtigungen untergeordneter Rollen. Dies verhindert redundante Autorisierungsdeklarationen in Geschäftsdiensten und setzt Autorisierungslogik direkt an der Methodenaufruf-Grenze durch.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Configuration@EnableMethodSecuritypublic class SecurityConfig {@Beanpublic RoleHierarchy roleHierarchy() {return RoleHierarchyImpl.withDefaultRolePrefix().role("ADMIN").implies("MANAGER").role("MANAGER").implies("USER").build();}@Beanpublic MethodSecurityExpressionHandler methodSecurityExpressionHandler(RoleHierarchy roleHierarchy) {DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();expressionHandler.setRoleHierarchy(roleHierarchy);return expressionHandler;}}@Servicepublic class ReportService {@PreAuthorize("hasRole('USER') and #reportType != 'FINANCIAL'")public Report generateReport(String reportType) {return new Report(reportType, "Generated data");}}
spring
Erklärung
1
return RoleHierarchyImpl.withDefaultRolePrefix().role("ADMIN").implies("MANAGER").role("MANAGER").implies("USER").build();
Definiert eine explizite Rollenhierarchie, in der ADMIN automatisch MANAGER-Rechte und dieser wiederum USER-Rechte einschließt.
2
expressionHandler.setRoleHierarchy(roleHierarchy);
Bindet die Rollenhierarchie-Konfiguration in die Auswertungs-Pipeline für Methodensicherheitsausdrücke ein.
3
@PreAuthorize("hasRole('USER') and #reportType != 'FINANCIAL'")
Wertet vor der Ausführung einen SpEL-Ausdruck aus, der die Rollenberechtigung über die Hierarchie und die Methodenparameter zur Laufzeit prüft.