Merge remote-tracking branch 'springsource/1.1.x'
Conflicts: spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java
This commit is contained in:
		
						commit
						a490aef888
					
				| 
						 | 
					@ -32,7 +32,6 @@ import org.springframework.context.annotation.Bean;
 | 
				
			||||||
import org.springframework.context.annotation.Configuration;
 | 
					import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
import org.springframework.context.annotation.Primary;
 | 
					import org.springframework.context.annotation.Primary;
 | 
				
			||||||
import org.springframework.context.event.ContextRefreshedEvent;
 | 
					import org.springframework.context.event.ContextRefreshedEvent;
 | 
				
			||||||
import org.springframework.core.Ordered;
 | 
					 | 
				
			||||||
import org.springframework.core.annotation.Order;
 | 
					import org.springframework.core.annotation.Order;
 | 
				
			||||||
import org.springframework.security.authentication.AuthenticationEventPublisher;
 | 
					import org.springframework.security.authentication.AuthenticationEventPublisher;
 | 
				
			||||||
import org.springframework.security.authentication.AuthenticationManager;
 | 
					import org.springframework.security.authentication.AuthenticationManager;
 | 
				
			||||||
| 
						 | 
					@ -42,6 +41,8 @@ import org.springframework.security.config.annotation.ObjectPostProcessor;
 | 
				
			||||||
import org.springframework.security.config.annotation.SecurityConfigurer;
 | 
					import org.springframework.security.config.annotation.SecurityConfigurer;
 | 
				
			||||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 | 
					import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 | 
				
			||||||
import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter;
 | 
					import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter;
 | 
				
			||||||
 | 
					import org.springframework.security.core.Authentication;
 | 
				
			||||||
 | 
					import org.springframework.security.core.AuthenticationException;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -57,8 +58,8 @@ import org.springframework.stereotype.Component;
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Configuration
 | 
					@Configuration
 | 
				
			||||||
@ConditionalOnBean(ObjectPostProcessor.class)
 | 
					@ConditionalOnBean(ObjectPostProcessor.class)
 | 
				
			||||||
@ConditionalOnMissingBean(AuthenticationManager.class)
 | 
					@ConditionalOnMissingBean({ AuthenticationManager.class })
 | 
				
			||||||
@Order(Ordered.LOWEST_PRECEDENCE - 3)
 | 
					@Order(0)
 | 
				
			||||||
public class AuthenticationManagerConfiguration extends
 | 
					public class AuthenticationManagerConfiguration extends
 | 
				
			||||||
		GlobalAuthenticationConfigurerAdapter {
 | 
							GlobalAuthenticationConfigurerAdapter {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,18 +85,27 @@ public class AuthenticationManagerConfiguration extends
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Bean
 | 
						@Bean
 | 
				
			||||||
	@Primary
 | 
						@Primary
 | 
				
			||||||
	public AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth)
 | 
						public AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth,
 | 
				
			||||||
			throws Exception {
 | 
								ApplicationContext context) throws Exception {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (isAuthenticationManagerAlreadyConfigured(context)) {
 | 
				
			||||||
 | 
								return new LazyAuthenticationManager(auth);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * This AuthenticationManagerBuilder is for the global AuthenticationManager
 | 
							 * This AuthenticationManagerBuilder is for the global AuthenticationManager
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		BootDefaultingAuthenticationConfigurerAdapter configurer = new BootDefaultingAuthenticationConfigurerAdapter();
 | 
							BootDefaultingAuthenticationConfigurerAdapter configurer = new BootDefaultingAuthenticationConfigurerAdapter();
 | 
				
			||||||
		configurer.init(auth);
 | 
					 | 
				
			||||||
		configurer.configure(auth);
 | 
							configurer.configure(auth);
 | 
				
			||||||
		AuthenticationManager manager = configurer.getAuthenticationManagerBuilder()
 | 
							AuthenticationManager manager = configurer.getAuthenticationManagerBuilder()
 | 
				
			||||||
				.getOrBuild();
 | 
									.getOrBuild();
 | 
				
			||||||
		configurer.configureParent(auth);
 | 
							configurer.configureParent(auth);
 | 
				
			||||||
		return manager;
 | 
							return manager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private boolean isAuthenticationManagerAlreadyConfigured(ApplicationContext context) {
 | 
				
			||||||
 | 
							return context.getBeanNamesForType(GlobalAuthenticationConfigurerAdapter.class).length > 2;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Component
 | 
						@Component
 | 
				
			||||||
| 
						 | 
					@ -142,8 +152,7 @@ public class AuthenticationManagerConfiguration extends
 | 
				
			||||||
	 * methods are invoked before configure, which cannot be guaranteed at this point.</li>
 | 
						 * methods are invoked before configure, which cannot be guaranteed at this point.</li>
 | 
				
			||||||
	 * </ul>
 | 
						 * </ul>
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	private class BootDefaultingAuthenticationConfigurerAdapter extends
 | 
						private class BootDefaultingAuthenticationConfigurerAdapter {
 | 
				
			||||||
			GlobalAuthenticationConfigurerAdapter {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private AuthenticationManagerBuilder defaultAuth;
 | 
							private AuthenticationManagerBuilder defaultAuth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +168,6 @@ public class AuthenticationManagerConfiguration extends
 | 
				
			||||||
			return this.defaultAuth;
 | 
								return this.defaultAuth;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@Override
 | 
					 | 
				
			||||||
		public void configure(AuthenticationManagerBuilder auth) throws Exception {
 | 
							public void configure(AuthenticationManagerBuilder auth) throws Exception {
 | 
				
			||||||
			if (auth.isConfigured()) {
 | 
								if (auth.isConfigured()) {
 | 
				
			||||||
				this.defaultAuth = auth;
 | 
									this.defaultAuth = auth;
 | 
				
			||||||
| 
						 | 
					@ -188,4 +196,20 @@ public class AuthenticationManagerConfiguration extends
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static class LazyAuthenticationManager implements AuthenticationManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private AuthenticationManagerBuilder builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public LazyAuthenticationManager(AuthenticationManagerBuilder builder) {
 | 
				
			||||||
 | 
								this.builder = builder;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							public Authentication authenticate(Authentication authentication)
 | 
				
			||||||
 | 
									throws AuthenticationException {
 | 
				
			||||||
 | 
								return this.builder.getOrBuild().authenticate(authentication);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,6 @@ import java.util.List;
 | 
				
			||||||
import java.util.concurrent.atomic.AtomicReference;
 | 
					import java.util.concurrent.atomic.AtomicReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.junit.After;
 | 
					import org.junit.After;
 | 
				
			||||||
import org.junit.Ignore;
 | 
					 | 
				
			||||||
import org.junit.Test;
 | 
					import org.junit.Test;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
 | 
				
			||||||
| 
						 | 
					@ -35,6 +34,7 @@ import org.springframework.context.ApplicationEvent;
 | 
				
			||||||
import org.springframework.context.ApplicationListener;
 | 
					import org.springframework.context.ApplicationListener;
 | 
				
			||||||
import org.springframework.context.annotation.Bean;
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
import org.springframework.context.annotation.Configuration;
 | 
					import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
 | 
					import org.springframework.core.annotation.Order;
 | 
				
			||||||
import org.springframework.mock.web.MockServletContext;
 | 
					import org.springframework.mock.web.MockServletContext;
 | 
				
			||||||
import org.springframework.orm.jpa.JpaTransactionManager;
 | 
					import org.springframework.orm.jpa.JpaTransactionManager;
 | 
				
			||||||
import org.springframework.security.authentication.AuthenticationManager;
 | 
					import org.springframework.security.authentication.AuthenticationManager;
 | 
				
			||||||
| 
						 | 
					@ -174,7 +174,8 @@ public class SecurityAutoConfigurationTests {
 | 
				
			||||||
		catch (BadCredentialsException e) {
 | 
							catch (BadCredentialsException e) {
 | 
				
			||||||
			// expected
 | 
								// expected
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		assertTrue(wrapper.get() instanceof AuthenticationFailureBadCredentialsEvent);
 | 
							assertTrue("Wrong event type: " + wrapper.get(),
 | 
				
			||||||
 | 
									wrapper.get() instanceof AuthenticationFailureBadCredentialsEvent);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
| 
						 | 
					@ -206,7 +207,6 @@ public class SecurityAutoConfigurationTests {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	@Ignore("gh-1801")
 | 
					 | 
				
			||||||
	public void testOverrideAuthenticationManagerWithBuilderAndInjectIntoSecurityFilter()
 | 
						public void testOverrideAuthenticationManagerWithBuilderAndInjectIntoSecurityFilter()
 | 
				
			||||||
			throws Exception {
 | 
								throws Exception {
 | 
				
			||||||
		this.context = new AnnotationConfigWebApplicationContext();
 | 
							this.context = new AnnotationConfigWebApplicationContext();
 | 
				
			||||||
| 
						 | 
					@ -315,6 +315,7 @@ public class SecurityAutoConfigurationTests {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Configuration
 | 
						@Configuration
 | 
				
			||||||
 | 
						@Order(-1)
 | 
				
			||||||
	protected static class AuthenticationManagerCustomizer extends
 | 
						protected static class AuthenticationManagerCustomizer extends
 | 
				
			||||||
			GlobalAuthenticationConfigurerAdapter {
 | 
								GlobalAuthenticationConfigurerAdapter {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue