|
104 | 104 | import static org.mockito.Mockito.clearInvocations;
|
105 | 105 | import static org.mockito.Mockito.mock;
|
106 | 106 | import static org.mockito.Mockito.never;
|
| 107 | +import static org.mockito.Mockito.spy; |
| 108 | +import static org.mockito.Mockito.times; |
107 | 109 | import static org.mockito.Mockito.verify;
|
108 | 110 |
|
109 | 111 | /**
|
@@ -995,6 +997,18 @@ void autowireWhenAspectJAutoProxyAndFactoryBeanThenExactlyOneAdvisorPerAnnotatio
|
995 | 997 | "postFilterAuthorizationMethodInterceptor", "authorizeReturnObjectMethodInterceptor");
|
996 | 998 | }
|
997 | 999 |
|
| 1000 | + // gh-15651 |
| 1001 | + @Test |
| 1002 | + @WithMockUser(roles = "ADMIN") |
| 1003 | + public void adviseWhenPrePostEnabledThenEachInterceptorRunsExactlyOnce() { |
| 1004 | + this.spring.register(MethodSecurityServiceConfig.class, CustomMethodSecurityExpressionHandlerConfig.class) |
| 1005 | + .autowire(); |
| 1006 | + MethodSecurityExpressionHandler expressionHandler = this.spring.getContext() |
| 1007 | + .getBean(MethodSecurityExpressionHandler.class); |
| 1008 | + this.methodSecurityService.manyAnnotations(new ArrayList<>(Arrays.asList("harold", "jonathan", "tim", "bo"))); |
| 1009 | + verify(expressionHandler, times(4)).createEvaluationContext(any(Supplier.class), any()); |
| 1010 | + } |
| 1011 | + |
998 | 1012 | private static Consumer<ConfigurableWebApplicationContext> disallowBeanOverriding() {
|
999 | 1013 | return (context) -> ((AnnotationConfigWebApplicationContext) context).setAllowBeanDefinitionOverriding(false);
|
1000 | 1014 | }
|
@@ -1090,6 +1104,19 @@ MethodSecurityService methodSecurityService() {
|
1090 | 1104 | }
|
1091 | 1105 |
|
1092 | 1106 | @Configuration
|
| 1107 | + @EnableMethodSecurity |
| 1108 | + static class CustomMethodSecurityExpressionHandlerConfig { |
| 1109 | + |
| 1110 | + private final MethodSecurityExpressionHandler expressionHandler = spy( |
| 1111 | + new DefaultMethodSecurityExpressionHandler()); |
| 1112 | + |
| 1113 | + @Bean |
| 1114 | + MethodSecurityExpressionHandler methodSecurityExpressionHandler() { |
| 1115 | + return this.expressionHandler; |
| 1116 | + } |
| 1117 | + |
| 1118 | + } |
| 1119 | + |
1093 | 1120 | @EnableMethodSecurity
|
1094 | 1121 | static class CustomPermissionEvaluatorConfig {
|
1095 | 1122 |
|
|
0 commit comments