This is an automated email from the ASF dual-hosted git repository.

oscerd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 1dc1ccac0402 CAMEL-23767: camel-platform-http-main - warn when 
authentication is enabled but no mechanism is configured
1dc1ccac0402 is described below

commit 1dc1ccac0402bf8ed549e3557fc3d9207e4e4c05
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri Jun 19 14:23:31 2026 +0200

    CAMEL-23767: camel-platform-http-main - warn when authentication is enabled 
but no mechanism is configured
    
    DefaultMainHttpServerFactory.configureAuthentication wired basic or JWT 
authentication
    only when a basic-auth properties file or a JWT keystore was configured. 
When
    authenticationEnabled=true but neither was set, the embedded HTTP server 
(and the
    management server) started without any authentication and without any 
warning,
    silently exposing an unprotected server. A clear warning is now logged at 
startup in
    that case so the misconfiguration is surfaced. The server still starts 
(behaviour is
    otherwise unchanged), so the change is non-breaking. Includes a log-capture 
test and a
    4.21 upgrade-guide note.
    
    Closes #24137
---
 .../http/main/DefaultMainHttpServerFactory.java    | 15 +++++++
 ...henticationConfigurationMainHttpServerTest.java | 48 ++++++++++++++++++++++
 .../test/resources/auth-no-mechanism.properties    | 21 ++++++++++
 .../ROOT/pages/camel-4x-upgrade-guide-4_21.adoc    |  7 ++++
 4 files changed, 91 insertions(+)

diff --git 
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/DefaultMainHttpServerFactory.java
 
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/DefaultMainHttpServerFactory.java
index c995da8a0651..054862843883 100644
--- 
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/DefaultMainHttpServerFactory.java
+++ 
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/DefaultMainHttpServerFactory.java
@@ -28,10 +28,14 @@ import org.apache.camel.main.MainHttpServerFactory;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.support.TempDirHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @JdkService(MainConstants.PLATFORM_HTTP_SERVER)
 public class DefaultMainHttpServerFactory implements CamelContextAware, 
MainHttpServerFactory {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(DefaultMainHttpServerFactory.class);
+
     private static final String DEFAULT_UPLOAD_DIR = 
"${java.io.tmpdir}/camel/camel-tmp-#uuid#/";
 
     private CamelContext camelContext;
@@ -118,6 +122,11 @@ public class DefaultMainHttpServerFactory implements 
CamelContextAware, MainHttp
             ObjectHelper.notNull(configuration.getJwtKeystorePassword(), 
"jwtKeyStorePassword");
             JWTAuthenticationConfigurer auth = new 
JWTAuthenticationConfigurer();
             
auth.configureAuthentication(server.getConfiguration().getAuthenticationConfig(),
 configuration);
+        } else {
+            LOG.warn("Authentication is enabled (authenticationEnabled=true) 
but no authentication mechanism is"
+                     + " configured: neither a basic-auth properties file 
(basicPropertiesFile) nor a JWT keystore"
+                     + " (jwtKeystoreType) is set. The HTTP server will start 
WITHOUT authentication. Configure an"
+                     + " authentication mechanism, or set 
authenticationEnabled=false to disable authentication.");
         }
     }
 
@@ -131,6 +140,12 @@ public class DefaultMainHttpServerFactory implements 
CamelContextAware, MainHttp
             ObjectHelper.notNull(configuration.getJwtKeystorePassword(), 
"jwtKeyStorePassword");
             JWTAuthenticationConfigurer auth = new 
JWTAuthenticationConfigurer();
             
auth.configureAuthentication(server.getConfiguration().getAuthenticationConfig(),
 configuration);
+        } else {
+            LOG.warn("Authentication is enabled (authenticationEnabled=true) 
but no authentication mechanism is"
+                     + " configured: neither a basic-auth properties file 
(basicPropertiesFile) nor a JWT keystore"
+                     + " (jwtKeystoreType) is set. The HTTP management server 
will start WITHOUT authentication."
+                     + " Configure an authentication mechanism, or set 
authenticationEnabled=false to disable"
+                     + " authentication.");
         }
     }
 
diff --git 
a/components/camel-platform-http-main/src/test/java/org/apache/camel/component/platform/http/main/authentication/AuthenticationConfigurationMainHttpServerTest.java
 
b/components/camel-platform-http-main/src/test/java/org/apache/camel/component/platform/http/main/authentication/AuthenticationConfigurationMainHttpServerTest.java
index bc35684cc0f8..417f2e4d6be6 100644
--- 
a/components/camel-platform-http-main/src/test/java/org/apache/camel/component/platform/http/main/authentication/AuthenticationConfigurationMainHttpServerTest.java
+++ 
b/components/camel-platform-http-main/src/test/java/org/apache/camel/component/platform/http/main/authentication/AuthenticationConfigurationMainHttpServerTest.java
@@ -16,14 +16,31 @@
  */
 package org.apache.camel.component.platform.http.main.authentication;
 
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
 import org.apache.camel.builder.RouteBuilder;
+import 
org.apache.camel.component.platform.http.main.DefaultMainHttpServerFactory;
 import org.apache.camel.main.Main;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Property;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class AuthenticationConfigurationMainHttpServerTest {
 
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
+
     @Test
     public void testIncompleteAuthenticationConfiguration() {
         Main main = new Main();
@@ -36,6 +53,37 @@ public class AuthenticationConfigurationMainHttpServerTest {
         main.stop();
     }
 
+    @Test
+    public void testAuthenticationEnabledWithoutMechanism() {
+        List<String> warnings = new CopyOnWriteArrayList<>();
+        AbstractAppender appender = new AbstractAppender("CaptureWarn", null, 
null, true, Property.EMPTY_ARRAY) {
+            @Override
+            public void append(LogEvent event) {
+                if (event.getLevel() == Level.WARN) {
+                    warnings.add(event.getMessage().getFormattedMessage());
+                }
+            }
+        };
+        appender.start();
+        Logger logger = (Logger) 
LogManager.getLogger(DefaultMainHttpServerFactory.class);
+        logger.addAppender(appender);
+
+        Main main = MainHttpServerAuthenticationTestSupport.createMain(
+                "auth-no-mechanism.properties", port, new 
PlatformHttpRouteBuilder());
+        try {
+            // Unlike an incomplete JWT configuration, a missing mechanism 
must not fail startup: the server
+            // still starts (unprotected) so the change stays backward 
compatible.
+            assertDoesNotThrow(main::start);
+            // ...but a clear warning must be logged so the misconfiguration 
is surfaced rather than silent.
+            assertTrue(warnings.stream().anyMatch(m -> m.contains("no 
authentication mechanism is configured")),
+                    "Expected a warning about the missing authentication 
mechanism, but got: " + warnings);
+        } finally {
+            logger.removeAppender(appender);
+            appender.stop();
+            MainHttpServerAuthenticationTestSupport.stopMain(main);
+        }
+    }
+
     private static class PlatformHttpRouteBuilder extends RouteBuilder {
         @Override
         public void configure() throws Exception {
diff --git 
a/components/camel-platform-http-main/src/test/resources/auth-no-mechanism.properties
 
b/components/camel-platform-http-main/src/test/resources/auth-no-mechanism.properties
new file mode 100644
index 000000000000..05967d8c0aa1
--- /dev/null
+++ 
b/components/camel-platform-http-main/src/test/resources/auth-no-mechanism.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+camel.server.enabled=true
+
+# Authentication is enabled but NO mechanism (neither basicPropertiesFile nor 
jwtKeystoreType) is configured.
+camel.server.authenticationEnabled=true
+camel.server.authenticationPath=/*
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
index 5c98bca70fa9..70917beafbda 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
@@ -2168,6 +2168,13 @@ for the embedded HTTP server:
 Both default to unset. When both are unset, JWT validation behaviour is 
unchanged (signature plus the
 default `exp` / `nbf` checks).
 
+Additionally, when `authenticationEnabled=true` but neither a basic-auth 
properties file
+(`basicPropertiesFile`) nor a JWT keystore (`jwtKeystoreType`) is configured, 
the embedded HTTP server now
+logs a clear warning at startup that it is starting without authentication. 
Previously this
+misconfiguration started an unprotected server silently. The server still 
starts and the behaviour is
+otherwise unchanged; configure an authentication mechanism or set 
`authenticationEnabled=false` to remove
+the warning.
+
 === camel-test
 
 `org.apache.camel.test.AvailablePortFinder.Port` now also implements

Reply via email to