Sicherheit auf Methodenebene mit SpEL
Posted: 27 Dec 2024, 11:03
Ich habe in der Spring-Dokumentation gelesen, dass ich zum Aktivieren dynamischer Metaanmerkungen auf Methodenebene eine Klasse namens AnnotationTemplateExpressionDefaults konfigurieren muss.
Das habe ich hier getan
Ich habe dann eine Annotation namens HasAnyRole konfiguriert:
Dann habe ich eine Methode mit HasAnyRole annotiert und die folgenden Rollen übergeben
Als ich diese Methode aufrief, erhielt ich die Fehlermeldung:
Aber bei weiteren Recherchen stelle ich fest, dass dies mit PreAuthorize nicht funktioniert und ich muss entweder AOP verwenden oder eine benutzerdefinierte Bean erstellen, die ich zum Auflösen der Anmerkung verwenden kann HasAnyRole.
Meine Frage ist, was mache ich falsch, weil ich der Dokumentation gefolgt bin und immer noch nicht das gewünschte Ergebnis erhalten habe
Das habe ich hier getan
Code: Select all
@Bean
public AnnotationTemplateExpressionDefaults annotationTemplateExpressionDefaults(){
return new AnnotationTemplateExpressionDefaults();
}
Code: Select all
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize(value = "hasAnyRole({roles})")
public @interface HasAnyRole {
String[] roles();
}
Code: Select all
@PostMapping("/create")
@HasAnyRole(roles = {"'MANAGING_DIRECTOR'","'OPERATIONS_MANAGER'","'PROJECT_MANAGER'"})
public ResponseEntity createProject(@Valid @RequestBody ProjectCreationRequest projectCreationRequest)
throws ProjectNotCreatedException{
return projectService.generateProjectCreationRequest(projectCreationRequest);
}
Code: Select all
Failed to evaluate expression 'hasAnyRole({roles})'"
Meine Frage ist, was mache ich falsch, weil ich der Dokumentation gefolgt bin und immer noch nicht das gewünschte Ergebnis erhalten habe