Sicherheit auf Methodenebene mit SpELJava

Java-Forum
Guest
 Sicherheit auf Methodenebene mit SpEL

Post by Guest »

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

Code: Select all

@Bean
public AnnotationTemplateExpressionDefaults annotationTemplateExpressionDefaults(){
return new AnnotationTemplateExpressionDefaults();
}
Ich habe dann eine Annotation namens HasAnyRole konfiguriert:

Code: Select all

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize(value = "hasAnyRole({roles})")
public @interface HasAnyRole {

String[] roles();
}
Dann habe ich eine Methode mit HasAnyRole annotiert und die folgenden Rollen übergeben

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);
}
Als ich diese Methode aufrief, erhielt ich die Fehlermeldung:

Code: Select all

Failed to evaluate expression 'hasAnyRole({roles})'"
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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post