Sicherheit auf Methodenebene mit SpEL

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Sicherheit auf Methodenebene mit SpEL

by Guest » 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

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

Top