0 Tage Serie
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
@EnableMethodSecurity
public class SecurityConfig {
@Bean
public RoleHierarchy roleHierarchy() {
return RoleHierarchyImpl.withDefaultRolePrefix()
.role("ADMIN").implies("MANAGER")
.role("MANAGER").implies("USER")
.build();
}
@Bean
public MethodSecurityExpressionHandler methodSecurityExpressionHandler(RoleHierarchy roleHierarchy) {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy);
return expressionHandler;
}
}
@Service
public 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.