You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2026/07/10 17:46:16 UTC
(camel-spring-boot) 03/08: CAMEL-24000: camel-spring-boot - do not mutate shared @ConfigurationProperties beans
This is an automated email from the ASF dual-hosted git repository.
Croway pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit 5b1f42a3e11d7104c4adeaee89f8541c72335899
Author: croway <fe...@gmail.com>
AuthorDate: Fri Jul 10 18:16:35 2026 +0200
CAMEL-24000: camel-spring-boot - do not mutate shared @ConfigurationProperties beans
The trace, error registry and security policy auto-configurations applied
dev/prod profile defaults by mutating the injected @ConfigurationProperties
singleton, so any other bean reading the same properties observed the
mutated values instead of what the user configured. Compute the effective
values locally instead.
Co-Authored-By: Claude Fable 5 <no...@anthropic.com>
---
.../CamelErrorRegistryAutoConfiguration.java | 8 ++++----
.../CamelSecurityPolicyAutoConfiguration.java | 23 ++++++++++++----------
.../boot/trace/CamelTraceAutoConfiguration.java | 12 +++++------
3 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
index 401ca4d9690..7cd3267a287 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
@@ -34,10 +34,10 @@ public class CamelErrorRegistryAutoConfiguration {
@Bean
public ErrorRegistry errorRegistry(CamelContext camelContext, CamelErrorRegistryConfigurationProperties config) {
// dev profile enables error registry to capture routing errors for tooling (TUI)
- if (!config.isEnabled() && "dev".equals(camelContext.getCamelContextExtension().getProfile())) {
- config.setEnabled(true);
- }
- if (!config.isEnabled()) {
+ // (do not mutate the shared configuration properties bean)
+ boolean enabled = config.isEnabled()
+ || "dev".equals(camelContext.getCamelContextExtension().getProfile());
+ if (!enabled) {
return null;
}
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
index 909287d45c7..5fc7414c187 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
@@ -51,14 +51,17 @@ public class CamelSecurityPolicyAutoConfiguration {
CamelSecurityPolicyConfigurationProperties config, Environment environment) {
// apply profile-based security defaults
+ // (do not mutate the shared configuration properties bean)
String profile = camelContext.getCamelContextExtension().getProfile();
- if ("dev".equals(profile) && config.getInsecureDevPolicy() == null) {
- config.setInsecureDevPolicy("allow");
- } else if ("prod".equals(profile) && "warn".equals(config.getPolicy())) {
- config.setPolicy("fail");
+ String policy = config.getPolicy();
+ String insecureDevPolicy = config.getInsecureDevPolicy();
+ if ("dev".equals(profile) && insecureDevPolicy == null) {
+ insecureDevPolicy = "allow";
+ } else if ("prod".equals(profile) && "warn".equals(policy)) {
+ policy = "fail";
}
- SecurityConfigurationProperties securityConfig = applySecurityProperties(camelContext, config);
+ SecurityConfigurationProperties securityConfig = applySecurityProperties(config, policy, insecureDevPolicy);
Map<String, Object> camelProperties = extractCamelProperties(environment);
@@ -74,14 +77,14 @@ public class CamelSecurityPolicyAutoConfiguration {
return result;
}
- private SecurityConfigurationProperties applySecurityProperties(CamelContext camelContext,
- CamelSecurityPolicyConfigurationProperties config) {
+ private SecurityConfigurationProperties applySecurityProperties(CamelSecurityPolicyConfigurationProperties config,
+ String policy, String insecureDevPolicy) {
// get the security config from camel-main's MainConfigurationProperties
// which is already bound by CamelAutoConfiguration via CamelConfigurationProperties
SecurityConfigurationProperties securityConfig = new SecurityConfigurationProperties(null);
- securityConfig.setPolicy(config.getPolicy());
+ securityConfig.setPolicy(policy);
if (config.getSecretPolicy() != null) {
securityConfig.setSecretPolicy(config.getSecretPolicy());
}
@@ -91,8 +94,8 @@ public class CamelSecurityPolicyAutoConfiguration {
if (config.getInsecureSerializationPolicy() != null) {
securityConfig.setInsecureSerializationPolicy(config.getInsecureSerializationPolicy());
}
- if (config.getInsecureDevPolicy() != null) {
- securityConfig.setInsecureDevPolicy(config.getInsecureDevPolicy());
+ if (insecureDevPolicy != null) {
+ securityConfig.setInsecureDevPolicy(insecureDevPolicy);
}
if (config.getAllowedProperties() != null) {
securityConfig.setAllowedProperties(config.getAllowedProperties());
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
index 9c03a19d5ba..c3f3c1ac6c9 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
@@ -33,10 +33,10 @@ public class CamelTraceAutoConfiguration {
public BacklogTracer backlogTracer(CamelContext camelContext, CamelTraceConfigurationProperties config)
throws Exception {
// dev profile enables tracer standby so tooling (TUI) can activate tracing on demand
- if (!config.isStandby() && "dev".equals(camelContext.getCamelContextExtension().getProfile())) {
- config.setStandby(true);
- }
- if (!config.isEnabled() && !config.isStandby()) {
+ // (do not mutate the shared configuration properties bean)
+ boolean standby = config.isStandby()
+ || "dev".equals(camelContext.getCamelContextExtension().getProfile());
+ if (!config.isEnabled() && !standby) {
return null;
}
@@ -45,12 +45,12 @@ public class CamelTraceAutoConfiguration {
// enable tracer on camel
camelContext.setBacklogTracing(config.isEnabled());
- camelContext.setBacklogTracingStandby(config.isStandby());
+ camelContext.setBacklogTracingStandby(standby);
camelContext.setBacklogTracingTemplates(config.isTraceTemplates());
BacklogTracer tracer = org.apache.camel.impl.debugger.BacklogTracer.createTracer(camelContext);
tracer.setEnabled(config.isEnabled());
- tracer.setStandby(config.isStandby());
+ tracer.setStandby(standby);
tracer.setBacklogSize(config.getBacklogSize());
tracer.setRemoveOnDump(config.isRemoveOnDump());
tracer.setBodyMaxChars(config.getBodyMaxChars());