Make Resource Server auto-config conditional on JwtDecoder class
Fixes gh-15372
This commit is contained in:
		
							parent
							
								
									31a5e85ab6
								
							
						
					
					
						commit
						f13697b278
					
				| 
						 | 
				
			
			@ -25,6 +25,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 | 
			
		|||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.context.annotation.Import;
 | 
			
		||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
 | 
			
		||||
import org.springframework.security.oauth2.jwt.JwtDecoder;
 | 
			
		||||
import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +38,8 @@ import org.springframework.security.oauth2.server.resource.BearerTokenAuthentica
 | 
			
		|||
@Configuration
 | 
			
		||||
@AutoConfigureBefore(ReactiveSecurityAutoConfiguration.class)
 | 
			
		||||
@EnableConfigurationProperties(OAuth2ResourceServerProperties.class)
 | 
			
		||||
@ConditionalOnClass({ EnableWebFluxSecurity.class, BearerTokenAuthenticationToken.class })
 | 
			
		||||
@ConditionalOnClass({ EnableWebFluxSecurity.class, BearerTokenAuthenticationToken.class,
 | 
			
		||||
		JwtDecoder.class })
 | 
			
		||||
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
 | 
			
		||||
@Import({ ReactiveOAuth2ResourceServerJwkConfiguration.class,
 | 
			
		||||
		ReactiveOAuth2ResourceServerWebSecurityConfiguration.class })
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfi
 | 
			
		|||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.context.annotation.Import;
 | 
			
		||||
import org.springframework.security.oauth2.jwt.JwtDecoder;
 | 
			
		||||
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +36,7 @@ import org.springframework.security.oauth2.server.resource.authentication.JwtAut
 | 
			
		|||
@Configuration
 | 
			
		||||
@AutoConfigureBefore(SecurityAutoConfiguration.class)
 | 
			
		||||
@EnableConfigurationProperties(OAuth2ResourceServerProperties.class)
 | 
			
		||||
@ConditionalOnClass(JwtAuthenticationToken.class)
 | 
			
		||||
@ConditionalOnClass({ JwtAuthenticationToken.class, JwtDecoder.class })
 | 
			
		||||
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
 | 
			
		||||
@Import({ OAuth2ResourceServerJwtConfiguration.class,
 | 
			
		||||
		OAuth2ResourceServerWebSecurityConfiguration.class })
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -154,6 +154,16 @@ public class ReactiveOAuth2ResourceServerAutoConfigurationTests {
 | 
			
		|||
						.doesNotHaveBean(BeanIds.SPRING_SECURITY_FILTER_CHAIN));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void autoConfigurationShouldBeConditionalOnReactiveJwtDecoderClass() {
 | 
			
		||||
		this.contextRunner.withPropertyValues(
 | 
			
		||||
				"spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://jwk-set-uri.com")
 | 
			
		||||
				.withUserConfiguration(JwtDecoderConfig.class)
 | 
			
		||||
				.withClassLoader(new FilteredClassLoader(ReactiveJwtDecoder.class))
 | 
			
		||||
				.run((context) -> assertThat(context)
 | 
			
		||||
						.doesNotHaveBean(BeanIds.SPRING_SECURITY_FILTER_CHAIN));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void autoConfigurationWhenSecurityWebFilterChainConfigPresentShouldNotAddOne() {
 | 
			
		||||
		this.contextRunner.withPropertyValues(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,6 +149,15 @@ public class OAuth2ResourceServerAutoConfigurationTests {
 | 
			
		|||
				.run((context) -> assertThat(getBearerTokenFilter(context)).isNull());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void autoConfigurationShouldBeConditionalOnJwtDecoderClass() {
 | 
			
		||||
		this.contextRunner.withPropertyValues(
 | 
			
		||||
				"spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://jwk-set-uri.com")
 | 
			
		||||
				.withUserConfiguration(JwtDecoderConfig.class)
 | 
			
		||||
				.withClassLoader(new FilteredClassLoader(JwtDecoder.class))
 | 
			
		||||
				.run((context) -> assertThat(getBearerTokenFilter(context)).isNull());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	private Filter getBearerTokenFilter(AssertableWebApplicationContext context) {
 | 
			
		||||
		FilterChainProxy filterChain = (FilterChainProxy) context
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue