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
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]@Bean
public AnnotationTemplateExpressionDefaults annotationTemplateExpressionDefaults(){
return new AnnotationTemplateExpressionDefaults();
}
[/code]
Ich habe dann eine Annotation namens HasAnyRole konfiguriert:
[code]@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize(value = "hasAnyRole({roles})")
public @interface HasAnyRole {
String[] roles();
}
[/code]
Dann habe ich eine Methode mit HasAnyRole annotiert und die folgenden Rollen übergeben
[code]@PostMapping("/create")
@HasAnyRole(roles = {"'MANAGING_DIRECTOR'","'OPERATIONS_MANAGER'","'PROJECT_MANAGER'"})
public ResponseEntity createProject(@Valid @RequestBody ProjectCreationRequest projectCreationRequest)
throws ProjectNotCreatedException{
return projectService.generateProjectCreationRequest(projectCreationRequest);
}
[/code]
Als ich diese Methode aufrief, erhielt ich die Fehlermeldung:
[code]Failed to evaluate expression 'hasAnyRole({roles})'"
[/code]
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