Replace @ConditionalOnExpression conditions
Replace @ConditionalOnExpression usage in auto-configuration in favor of faster direct Environment access.
This commit is contained in:
parent
71dbec381a
commit
9b78f5d52e
|
@ -19,16 +19,22 @@ package org.springframework.boot.actuate.autoconfigure;
|
||||||
import javax.management.MBeanServer;
|
import javax.management.MBeanServer;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfiguration.JmxEnabledCondition;
|
||||||
import org.springframework.boot.actuate.endpoint.Endpoint;
|
import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter;
|
import org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
|
||||||
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
@ -41,7 +47,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
* @author Andy Wilkinson
|
* @author Andy Wilkinson
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnExpression("${endpoints.jmx.enabled:true} && ${spring.jmx.enabled:true}")
|
@Conditional(JmxEnabledCondition.class)
|
||||||
@AutoConfigureAfter({ EndpointAutoConfiguration.class, JmxAutoConfiguration.class })
|
@AutoConfigureAfter({ EndpointAutoConfiguration.class, JmxAutoConfiguration.class })
|
||||||
@EnableConfigurationProperties(EndpointMBeanExportProperties.class)
|
@EnableConfigurationProperties(EndpointMBeanExportProperties.class)
|
||||||
public class EndpointMBeanExportAutoConfiguration {
|
public class EndpointMBeanExportAutoConfiguration {
|
||||||
|
@ -71,4 +77,26 @@ public class EndpointMBeanExportAutoConfiguration {
|
||||||
return new JmxAutoConfiguration().mbeanServer();
|
return new JmxAutoConfiguration().mbeanServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Condition to check that spring.jmx and endpoints.jmx are enabled.
|
||||||
|
*/
|
||||||
|
static class JmxEnabledCondition extends SpringBootCondition {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConditionOutcome getMatchOutcome(ConditionContext context,
|
||||||
|
AnnotatedTypeMetadata metadata) {
|
||||||
|
boolean jmxEnabled = isEnabled(context, "spring.jmx.");
|
||||||
|
boolean jmxEndpointsEnabled = isEnabled(context, "endpoints.jmx.");
|
||||||
|
return new ConditionOutcome(jmxEnabled && jmxEndpointsEnabled,
|
||||||
|
"JMX Endpoints");
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEnabled(ConditionContext context, String prefix) {
|
||||||
|
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
|
||||||
|
context.getEnvironment(), prefix);
|
||||||
|
return resolver.getProperty("enabled", Boolean.class, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,18 +20,24 @@ import java.util.Properties;
|
||||||
|
|
||||||
import org.jolokia.http.AgentServlet;
|
import org.jolokia.http.AgentServlet;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.JolokiaAutoConfiguration.JolokiaCondition;
|
||||||
import org.springframework.boot.actuate.endpoint.mvc.JolokiaMvcEndpoint;
|
import org.springframework.boot.actuate.endpoint.mvc.JolokiaMvcEndpoint;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
|
||||||
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration;
|
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link EnableAutoConfiguration Auto-configuration} for embedding Jolokia, a JMX-HTTP
|
* {@link EnableAutoConfiguration Auto-configuration} for embedding Jolokia, a JMX-HTTP
|
||||||
|
@ -55,7 +61,7 @@ import org.springframework.context.annotation.Configuration;
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnWebApplication
|
@ConditionalOnWebApplication
|
||||||
@ConditionalOnClass({ AgentServlet.class })
|
@ConditionalOnClass({ AgentServlet.class })
|
||||||
@ConditionalOnExpression("${endpoints.jolokia.enabled:${endpoints.enabled:true}}")
|
@Conditional(JolokiaCondition.class)
|
||||||
@AutoConfigureBefore(ManagementSecurityAutoConfiguration.class)
|
@AutoConfigureBefore(ManagementSecurityAutoConfiguration.class)
|
||||||
@AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class)
|
@AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class)
|
||||||
@EnableConfigurationProperties(JolokiaProperties.class)
|
@EnableConfigurationProperties(JolokiaProperties.class)
|
||||||
|
@ -78,4 +84,26 @@ public class JolokiaAutoConfiguration {
|
||||||
return initParameters;
|
return initParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Condition to check that the Jolokia endpoint is enabled.
|
||||||
|
*/
|
||||||
|
static class JolokiaCondition extends SpringBootCondition {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConditionOutcome getMatchOutcome(ConditionContext context,
|
||||||
|
AnnotatedTypeMetadata metadata) {
|
||||||
|
boolean endpointsEnabled = isEnabled(context, "endpoints.", true);
|
||||||
|
boolean enabled = isEnabled(context, "endpoints.jolokia.", endpointsEnabled);
|
||||||
|
return new ConditionOutcome(enabled, "Jolokia enabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEnabled(ConditionContext context, String prefix,
|
||||||
|
boolean defaultValue) {
|
||||||
|
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
|
||||||
|
context.getEnvironment(), prefix);
|
||||||
|
return resolver.getProperty("enabled", Boolean.class, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,19 +19,26 @@ package org.springframework.boot.autoconfigure.security.oauth2.client;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
|
||||||
|
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2RestOperationsConfiguration.OAuth2ClientIdCondition;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.boot.context.embedded.FilterRegistrationBean;
|
import org.springframework.boot.context.embedded.FilterRegistrationBean;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
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.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.context.annotation.ScopedProxyMode;
|
import org.springframework.context.annotation.ScopedProxyMode;
|
||||||
|
import org.springframework.core.env.PropertyResolver;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
|
import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
|
||||||
|
@ -48,6 +55,7 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.E
|
||||||
import org.springframework.security.oauth2.config.annotation.web.configuration.OAuth2ClientConfiguration;
|
import org.springframework.security.oauth2.config.annotation.web.configuration.OAuth2ClientConfiguration;
|
||||||
import org.springframework.security.oauth2.provider.OAuth2Authentication;
|
import org.springframework.security.oauth2.provider.OAuth2Authentication;
|
||||||
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
|
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration for OAuth2 Single Sign On REST operations.
|
* Configuration for OAuth2 Single Sign On REST operations.
|
||||||
|
@ -57,7 +65,7 @@ import org.springframework.security.oauth2.provider.authentication.OAuth2Authent
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnClass(EnableOAuth2Client.class)
|
@ConditionalOnClass(EnableOAuth2Client.class)
|
||||||
@ConditionalOnExpression("'${spring.oauth2.client.clientId:}'!=''")
|
@Conditional(OAuth2ClientIdCondition.class)
|
||||||
public class OAuth2RestOperationsConfiguration {
|
public class OAuth2RestOperationsConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -158,4 +166,20 @@ public class OAuth2RestOperationsConfiguration {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Condition to check if a {@code spring.oauth2.client.client-id} is specified.
|
||||||
|
*/
|
||||||
|
static class OAuth2ClientIdCondition extends SpringBootCondition {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConditionOutcome getMatchOutcome(ConditionContext context,
|
||||||
|
AnnotatedTypeMetadata metadata) {
|
||||||
|
PropertyResolver resolver = new RelaxedPropertyResolver(
|
||||||
|
context.getEnvironment(), "spring.oauth2.client.");
|
||||||
|
String clientId = resolver.getProperty("client-id");
|
||||||
|
return new ConditionOutcome(StringUtils.hasLength(clientId),
|
||||||
|
"Non empty spring.oauth2.client.client-id");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue