Describe the bug
I have an abstract class that has the @PreAuthorize annotation. Its subclass also has an identical @PreAuthorize annotation.
To Reproduce
Attempting to invoke an endpoint in the subclass results in this error message:
org.springframework.core.annotation.AnnotationConfigurationException: Found more than one annotation of type interface org.springframework.security.access.prepost.PreAuthorize attributed to class com.agencycomp.report.ReportController Please remove the duplicate annotations and publish a bean to handle your authorization logic.
Expected behavior
In Spring Boot 2.7.3, this code worked as is. (org.springframework.security:spring-security-core:jar:5.7.11:compile)
After migrating to Spring Boot 3.2, this no longer works. (org.springframework.security:spring-security-core:jar:6.2.4:compile)
I was able to remove exact duplicates, but as the code sample below reveals, there are places there the SpEL is not the same, so they should not be considered duplicated.
Ideally, I should be able to define the @PreAuthorize annotation in the superclass, and only override it as needed in subclasses. This is how it worked previously.
Sample
@PreAuthorize("!principal.locked")
public abstract class UserDependentController {
@PostMapping
protected Object create(@NonNull @Valid @RequestBody final Object dto) {
return null;
}
}
@RestController
@RequestMapping("app/reports")
@PreAuthorize("!principal.locked && hasRole('ROLE_REGULAR')")
//@PreAuthorize("hasRole('ROLE_REGULAR')") -- attempt to create an annotation that is not the same
class ReportController extends UserDependentController {
@GetMapping("types")
Page<Object> getTypes() {
return null;
}
}
Describe the bug
I have an abstract class that has the
@PreAuthorizeannotation. Its subclass also has an identical@PreAuthorizeannotation.To Reproduce
Attempting to invoke an endpoint in the subclass results in this error message:
Expected behavior
In Spring Boot 2.7.3, this code worked as is. (
org.springframework.security:spring-security-core:jar:5.7.11:compile)After migrating to Spring Boot 3.2, this no longer works. (
org.springframework.security:spring-security-core:jar:6.2.4:compile)I was able to remove exact duplicates, but as the code sample below reveals, there are places there the SpEL is not the same, so they should not be considered duplicated.
Ideally, I should be able to define the
@PreAuthorizeannotation in the superclass, and only override it as needed in subclasses. This is how it worked previously.Sample