Synthesize all annotation attributes

Issue gh-14601
This commit is contained in:
Josh Cummings 2024-04-04 13:13:17 -06:00
parent 560665d575
commit 3f7355abc6
No known key found for this signature in database
GPG Key ID: A306A51F43B8E5A5
3 changed files with 7 additions and 4 deletions

View File

@ -305,7 +305,7 @@ public interface MethodSecurityService {
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@PostAuthorize(value = "hasRole('{value}')", postProcessorClass = NullPostProcessor.class)
@PostAuthorize(value = "hasRole('{role}')", postProcessorClass = NullPostProcessor.class)
@interface NullDenied {
String role();

View File

@ -827,7 +827,9 @@ public class PrePostMethodSecurityConfigurationTests {
@Test
@WithMockUser
void postAuthorizeWhenNullDeniedMetaAnnotationThanWorks() {
this.spring.register(MethodSecurityServiceEnabledConfig.class, MethodSecurityService.NullPostProcessor.class)
this.spring
.register(MethodSecurityServiceEnabledConfig.class, MetaAnnotationPlaceholderConfig.class,
MethodSecurityService.NullPostProcessor.class)
.autowire();
MethodSecurityService service = this.spring.getContext().getBean(MethodSecurityService.class);
String result = service.postAuthorizeDeniedWithNullDenied();

View File

@ -19,7 +19,6 @@ package org.springframework.security.authorization.method;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -76,7 +75,9 @@ final class AuthorizationAnnotationUtils {
}
AnnotatedElement annotatedElement = (AnnotatedElement) mergedAnnotation.getSource();
String value = helper.replacePlaceholders(expression, stringProperties::get);
return MergedAnnotation.of(annotatedElement, type, Collections.singletonMap("value", value)).synthesize();
Map<String, Object> properties = new HashMap<>(mergedAnnotation.asMap());
properties.put("value", value);
return MergedAnnotation.of(annotatedElement, type, properties).synthesize();
};
return (annotatedElement) -> findDistinctAnnotation(annotatedElement, type, map);
}