| 
					
				 | 
			
			
				@@ -37,6 +37,7 @@ import org.springframework.context.annotation.Configuration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.AccessDeniedException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.PermissionEvaluator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.annotation.Secured; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.hierarchicalroles.RoleHierarchy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -194,6 +195,15 @@ public class GlobalMethodSecurityConfigurationTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		assertThat(pp.afterInit).containsKeys("dataSource"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// SEC-9845 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void enableGlobalMethodSecurityWhenBeanPostProcessorThenInvokedForDefaultMethodSecurityExpressionHandler() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(Sec9845Config.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MockBeanPostProcessor pp = this.spring.getContext().getBean(MockBeanPostProcessor.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(pp.beforeInitClass).containsKeys(DefaultMethodSecurityExpressionHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(pp.afterInitClass).containsKeys(DefaultMethodSecurityExpressionHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// SEC-3045 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void globalSecurityProxiesSecurity() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -441,21 +451,37 @@ public class GlobalMethodSecurityConfigurationTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@EnableGlobalMethodSecurity(prePostEnabled = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static class Sec9845Config { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		@Bean 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BeanPostProcessor mockBeanPostProcessor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new MockBeanPostProcessor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class MockBeanPostProcessor implements BeanPostProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Map<String, Object> beforeInit = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Map<String, Object> afterInit = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Map<Class<?>, Object> beforeInitClass = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Map<Class<?>, Object> afterInitClass = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.beforeInit.put(beanName, bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.beforeInitClass.put(bean.getClass(), bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return bean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.afterInit.put(beanName, bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.afterInitClass.put(bean.getClass(), bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return bean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |