|
101 | 101 | import static org.mockito.Mockito.clearInvocations;
|
102 | 102 | import static org.mockito.Mockito.mock;
|
103 | 103 | import static org.mockito.Mockito.never;
|
| 104 | +import static org.mockito.Mockito.spy; |
| 105 | +import static org.mockito.Mockito.times; |
104 | 106 | import static org.mockito.Mockito.verify;
|
105 | 107 |
|
106 | 108 | /**
|
@@ -984,6 +986,18 @@ void autowireWhenAspectJAutoProxyAndFactoryBeanThenExactlyOneAdvisorPerAnnotatio
|
984 | 986 | "postFilterAuthorizationMethodInterceptor", "authorizeReturnObjectMethodInterceptor");
|
985 | 987 | }
|
986 | 988 |
|
| 989 | + // gh-15651 |
| 990 | + @Test |
| 991 | + @WithMockUser(roles = "ADMIN") |
| 992 | + public void adviseWhenPrePostEnabledThenEachInterceptorRunsExactlyOnce() { |
| 993 | + this.spring.register(MethodSecurityServiceConfig.class, CustomMethodSecurityExpressionHandlerConfig.class) |
| 994 | + .autowire(); |
| 995 | + MethodSecurityExpressionHandler expressionHandler = this.spring.getContext() |
| 996 | + .getBean(MethodSecurityExpressionHandler.class); |
| 997 | + this.methodSecurityService.manyAnnotations(new ArrayList<>(Arrays.asList("harold", "jonathan", "tim", "bo"))); |
| 998 | + verify(expressionHandler, times(4)).createEvaluationContext(any(Supplier.class), any()); |
| 999 | + } |
| 1000 | + |
987 | 1001 | private static Consumer<ConfigurableWebApplicationContext> disallowBeanOverriding() {
|
988 | 1002 | return (context) -> ((AnnotationConfigWebApplicationContext) context).setAllowBeanDefinitionOverriding(false);
|
989 | 1003 | }
|
@@ -1079,6 +1093,19 @@ MethodSecurityService methodSecurityService() {
|
1079 | 1093 | }
|
1080 | 1094 |
|
1081 | 1095 | @Configuration
|
| 1096 | + @EnableMethodSecurity |
| 1097 | + static class CustomMethodSecurityExpressionHandlerConfig { |
| 1098 | + |
| 1099 | + private final MethodSecurityExpressionHandler expressionHandler = spy( |
| 1100 | + new DefaultMethodSecurityExpressionHandler()); |
| 1101 | + |
| 1102 | + @Bean |
| 1103 | + MethodSecurityExpressionHandler methodSecurityExpressionHandler() { |
| 1104 | + return this.expressionHandler; |
| 1105 | + } |
| 1106 | + |
| 1107 | + } |
| 1108 | + |
1082 | 1109 | @EnableMethodSecurity
|
1083 | 1110 | static class CustomPermissionEvaluatorConfig {
|
1084 | 1111 |
|
|
0 commit comments