diff --git a/test/src/main/java/org/springframework/security/test/context/support/WithSecurityContextTestExecutionListener.java b/test/src/main/java/org/springframework/security/test/context/support/WithSecurityContextTestExecutionListener.java index f90d5d5839..223fd25bc5 100644 --- a/test/src/main/java/org/springframework/security/test/context/support/WithSecurityContextTestExecutionListener.java +++ b/test/src/main/java/org/springframework/security/test/context/support/WithSecurityContextTestExecutionListener.java @@ -148,7 +148,7 @@ public class WithSecurityContextTestExecutionListener extends AbstractTestExecut } private Annotation findAnnotation(AnnotatedElement annotated, Class type) { - Annotation findAnnotation = AnnotationUtils.findAnnotation(annotated, type); + Annotation findAnnotation = AnnotatedElementUtils.findMergedAnnotation(annotated, type); if (findAnnotation != null) { return findAnnotation; } diff --git a/test/src/test/java/org/springframework/security/test/context/showcase/WithMockUserTests.java b/test/src/test/java/org/springframework/security/test/context/showcase/WithMockUserTests.java index 2889448217..7f067cca3f 100644 --- a/test/src/test/java/org/springframework/security/test/context/showcase/WithMockUserTests.java +++ b/test/src/test/java/org/springframework/security/test/context/showcase/WithMockUserTests.java @@ -16,11 +16,18 @@ package org.springframework.security.test.context.showcase; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; +import org.springframework.core.annotation.AliasFor; import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; @@ -77,6 +84,24 @@ public class WithMockUserTests { assertThat(message).contains("admin").contains("ADMIN").contains("USER").doesNotContain("ROLE_"); } + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @Inherited + @WithMockUser(roles = "ADMIN") + public @interface WithAdminUser { + + @AliasFor(annotation = WithMockUser.class, attribute = "value") + String value(); + + } + + @Test + @WithAdminUser("admin") + public void getMessageWithMetaAnnotationAdminUser() { + String message = this.messageService.getMessage(); + assertThat(message).contains("admin").contains("ADMIN").contains("ROLE_ADMIN"); + } + @EnableGlobalMethodSecurity(prePostEnabled = true) @ComponentScan(basePackageClasses = HelloMessageService.class) static class Config {