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

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


The following commit(s) were added to refs/heads/main by this push:
     new d4c2165c11 Add Jasypt native support
d4c2165c11 is described below

commit d4c2165c119b2090248403583c1718c494f153d5
Author: James Netherton <[email protected]>
AuthorDate: Wed Jan 24 08:09:21 2024 +0000

    Add Jasypt native support
    
    Fixes #792
---
 docs/modules/ROOT/examples/others/jasypt.yml       |   6 +-
 .../ROOT/pages/reference/extensions/jasypt.adoc    | 209 ++++++++++++++++++++-
 .../jasypt/deployment/JasyptProcessor.java         |  46 -----
 extensions-jvm/pom.xml                             |   1 -
 .../jasypt/deployment/pom.xml                      |  22 +++
 .../jasypt/deployment/JasyptProcessor.java         |  72 +++++++
 .../component/jasypt/JasyptDisabledTest.java       |  55 ++++++
 .../jasypt/JasyptPasswordNotProvidedTest.java      |  23 +--
 .../jasypt/JasyptPasswordSysEnvPrefixTest.java     |  54 ++++++
 .../jasypt/JasyptPasswordSysPrefixTest.java        |  54 ++++++
 {extensions-jvm => extensions}/jasypt/pom.xml      |   2 +-
 .../jasypt/runtime/pom.xml                         |   6 +
 extensions/jasypt/runtime/src/main/doc/usage.adoc  | 135 +++++++++++++
 .../component/jasypt/CamelJasyptConfig.java        |  80 ++++++++
 .../CamelJasyptConfigSourceInterceptorFactory.java |  63 +++++++
 .../jasypt/CamelJasyptPropertiesParserHolder.java  |  28 +--
 .../component/jasypt/CamelJasyptRecorder.java      |  51 +++++
 .../CamelJasyptSecretKeysHandlerFactory.java       | 186 ++++++++++++++++++
 .../jasypt/JasyptConfigurationCustomizer.java      |  19 +-
 .../jasypt/graal/JasyptSubstitutions.java          | 126 +++++++++++++
 .../main/resources/META-INF/quarkus-extension.yaml |   3 +-
 ....smallrye.config.ConfigSourceInterceptorFactory |   1 +
 .../io.smallrye.config.SecretKeysHandlerFactory    |   1 +
 extensions/pom.xml                                 |   1 +
 integration-tests-jvm/jasypt/pom.xml               |  83 --------
 integration-tests-jvm/pom.xml                      |   1 -
 integration-tests/jasypt/pom.xml                   | 208 ++++++++++++++++++++
 .../component/jasypt/it/AlgorithmUtils.java        |  19 +-
 .../it/CustomJasyptConfigurationCustomizer.java    |  24 ++-
 .../jasypt/it/JasyptManualConfigurationRoutes.java |  46 +++++
 .../component/jasypt/it/JasyptResource.java        | 112 +++++++++++
 .../quarkus/component/jasypt/it/JasyptRoutes.java  |  73 +++++++
 .../src/main/resources/application.properties      |  46 +++++
 .../src/main/resources/routes/jasypt-routes.xml    |  24 +--
 .../src/main/resources/routes/jasypt-routes.yaml   |  22 +--
 .../jasypt/src/main/resources/secret.properties    |  19 ++
 .../jasypt/it/JasyptAlternateAlgorithmIT.java      |  17 +-
 .../jasypt/it/JasyptAlternateAlgorithmTest.java    |  18 +-
 .../it/JasyptAlternateAlgorithmTestProfile.java    |  38 ++++
 .../jasypt/it/JasyptAlternateConfigProfileIT.java  |  19 +-
 .../it/JasyptAlternateConfigProfileTest.java       |  30 ++-
 .../JasyptAlternateConfigProfileTestProfile.java   |  16 +-
 .../jasypt/it/JasyptAlternateConfigSourceIT.java   |  17 +-
 .../jasypt/it/JasyptAlternateConfigSourceTest.java |  18 +-
 .../it/JasyptAlternateConfigSourceTestProfile.java |  18 +-
 .../jasypt/it/JasyptConfigurationCustomizerIT.java |  17 +-
 .../it/JasyptConfigurationCustomizerTest.java      |  40 ++--
 .../JasyptConfigurationCustomizerTestProfile.java  |  34 ++++
 .../quarkus/component/jasypt/it/JasyptIT.java      |  16 +-
 .../jasypt/it/JasyptManualConfigurationIT.java     |  17 +-
 .../it/JasyptManualConfigurationProfile.java       |  19 +-
 .../jasypt/it/JasyptManualConfigurationTest.java   |  55 ++++++
 .../jasypt/it/JasyptSecureExtensionConfigTest.java |  24 ++-
 .../it/JasyptSecureExtensionConfigTestProfile.java |  28 +--
 .../quarkus/component/jasypt/it/JasyptTest.java    |  98 ++++++++++
 integration-tests/pom.xml                          |   1 +
 tooling/scripts/test-categories.yaml               |   1 +
 57 files changed, 2041 insertions(+), 421 deletions(-)

diff --git a/docs/modules/ROOT/examples/others/jasypt.yml 
b/docs/modules/ROOT/examples/others/jasypt.yml
index 695f4a433f..ca64854cf6 100644
--- a/docs/modules/ROOT/examples/others/jasypt.yml
+++ b/docs/modules/ROOT/examples/others/jasypt.yml
@@ -2,11 +2,11 @@
 # This file was generated by 
camel-quarkus-maven-plugin:update-extension-doc-page
 cqArtifactId: camel-quarkus-jasypt
 cqArtifactIdBase: jasypt
-cqNativeSupported: false
-cqStatus: Preview
+cqNativeSupported: true
+cqStatus: Stable
 cqDeprecated: false
 cqJvmSince: 1.2.0
-cqNativeSince: n/a
+cqNativeSince: 3.7.0
 cqCamelPartName: jasypt
 cqCamelPartTitle: Jasypt
 cqCamelPartDescription: Security using Jasypt
diff --git a/docs/modules/ROOT/pages/reference/extensions/jasypt.adoc 
b/docs/modules/ROOT/pages/reference/extensions/jasypt.adoc
index 85f088637a..79148f51ef 100644
--- a/docs/modules/ROOT/pages/reference/extensions/jasypt.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/jasypt.adoc
@@ -4,17 +4,17 @@
 = Jasypt
 :linkattrs:
 :cq-artifact-id: camel-quarkus-jasypt
-:cq-native-supported: false
-:cq-status: Preview
-:cq-status-deprecation: Preview
+:cq-native-supported: true
+:cq-status: Stable
+:cq-status-deprecation: Stable
 :cq-description: Security using Jasypt
 :cq-deprecated: false
 :cq-jvm-since: 1.2.0
-:cq-native-since: n/a
+:cq-native-since: 3.7.0
 
 ifeval::[{doc-show-badges} == true]
 [.badges]
-[.badge-key]##JVM since##[.badge-supported]##1.2.0## 
[.badge-key]##Native##[.badge-unsupported]##unsupported##
+[.badge-key]##JVM since##[.badge-supported]##1.2.0## [.badge-key]##Native 
since##[.badge-supported]##3.7.0##
 endif::[]
 
 Security using Jasypt
@@ -29,6 +29,10 @@ Please refer to the above link for usage and configuration 
details.
 [id="extensions-jasypt-maven-coordinates"]
 == Maven coordinates
 
+https://{link-quarkus-code-generator}/?extension-search=camel-quarkus-jasypt[Create
 a new project with this extension on {link-quarkus-code-generator}, 
window="_blank"]
+
+Or add the coordinates to your existing project:
+
 [source,xml]
 ----
 <dependency>
@@ -39,3 +43,198 @@ Please refer to the above link for usage and configuration 
details.
 ifeval::[{doc-show-user-guide-link} == true]
 Check the xref:user-guide/index.adoc[User guide] for more information about 
writing Camel Quarkus applications.
 endif::[]
+
+[id="extensions-jasypt-usage"]
+== Usage
+The configuration of Jasypt in Camel Quarkus is driven by 
<<extensions-jasypt-additional-camel-quarkus-configuration,configuration 
properties>>.
+
+The minimum expectation is that you provide a master password for Jasypt 
decryption with configuration property `quarkus.camel.jasypt.password`.
+
+You can choose the encryption algorithm and other aspects of the Jasypt 
configuration via the `quarkus.camel.jasypt` options described below.
+
+By default, you do not need to write custom code to configure the Camel 
`JasyptPropertiesParser` or `PropertiesComponent`. This is done for you 
automatically.
+
+Any Camel configuration property added to `application.properties` can be 
secured with Jasypt.
+To encrypt a value, there is a utility that can be run with 
https://www.jbang.dev/[JBang].
+
+[source]
+----
+jbang org.apache.camel:camel-jasypt:{camel-version} -c encrypt -p 
secret-password -i "Some secret content"
+----
+
+IMPORTANT: If you choose to use a different Jasypt algorithm to the default 
(`PBEWithMD5AndDES`), you must provide `-a` (algorithm), `-riga` (IV generator 
algorithm) & `-rsga` (Salt generator algorithm)
+arguments to set the correct algorithms used in encryption. Else your 
application will not be able to decrypt configuration values.
+
+Configuration properties can be added to `application.properties` with the 
encrypted value enclosed within `ENC()` For example.
+
+[source]
+----
+my.secret = ENC(BoDSRQfdBME4V/AcugPOkaR+IcyKufGz)
+----
+
+In your Camel routes, you can refer to the property name using the standard 
placeholder syntax and its value will get decrypted.
+
+[source,java]
+----
+public class MySecureRoute extends RouteBuilder {
+    @Override
+    public void configure() {
+        from("timer:tick?period=5s")
+            .to("{{my.secret}}");
+    }
+}
+----
+
+TIP: You can use the ability to mask security sensitive configuration in Camel 
by suffixing property values with `.secret`.
+You can also disable the startup configuration summary with the configuration 
`camel.main.autoConfigurationLogSummary = false`.
+
+[id="extensions-jasypt-usage-injecting-encrypted-configuration"]
+==== Injecting encrypted configuration
+
+You can use the `@ConfigProperty` annotation to inject encrypted configuration 
into your Camel routes or CDI beans.
+
+[source,java]
+----
+@ApplicationScoped
+public class MySecureRoute extends RouteBuilder {
+    @ConfigInject("my.secret")
+    String mySecret;
+
+    @Override
+    public void configure() {
+        from("timer:tick?period=5s")
+            .to(mySecret);
+    }
+}
+----
+
+[id="extensions-jasypt-usage-securing-alternate-configuration-sources"]
+==== Securing alternate configuration sources
+
+If you prefer to keep your secret configuration in a file separate to 
`application.properties`,
+you can use the `quarkus.config.locations` configuration option to specify 
additional configuration files.
+
+In native mode you must also add any additional configuration file resource 
paths to `quarkus.native.resources.includes`.
+
+[id="extensions-jasypt-usage-finer-control-of-jasypt-configuration"]
+==== Finer control of Jasypt configuration
+
+If you require finer control of the Jasypt configuration than that provided by 
the default configuration, the following options are available.
+
+[id="extensions-jasypt-usage-jasyptconfigurationcustomizer"]
+===== JasyptConfigurationCustomizer
+
+Implement a `JasyptConfigurationCustomizer` class to customize any aspect of 
the Jasypt `EnvironmentStringPBEConfig`.
+
+[source,java]
+----
+package org.acme;
+
+import org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer;
+import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.salt.RandomSaltGenerator;
+
+public class JasyptConfigurationCustomizer implements 
JasyptConfigurationCustomizer {
+    public void customize(EnvironmentStringPBEConfig config) {
+        // Custom algorithms
+        config.setAlgorithm("PBEWithHmacSHA256AndAES_256");
+        config.setSaltGenerator(new RandomSaltGenerator("PKCS11"));
+        config.setIvGenerator(new RandomIvGenerator("PKCS11"));
+        // Additional customizations...
+    }
+}
+----
+
+In `application.properties` add the 
`quarkus.camel.jasypt.configuration-customizer-class-name` configuration 
property.
+
+[source]
+----
+quarkus.camel.jasypt.configuration-customizer-class-name = 
org.acme.MyJasyptEncryptorCustomizer
+----
+
+[id="extensions-jasypt-usage-disabling-automatic-jasypt-configuration"]
+===== Disabling automatic Jasypt configuration
+
+If you prefer to use the 'classic' Java DSL way of configuring Camel Jasypt, 
you can disable the automatic configuration with `quarkus.camel.jasypt.enabled 
= false`.
+
+This allows you to configure the Camel `JasyptPropertiesParser` and 
`PropertiesComponent` manually.
+
+NOTE: In this mode, you cannot use the `@ConfigProperty` annotation to inject 
encrypted configuration properties.
+
+[source,java]
+----
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.jasypt.JasyptPropertiesParser;
+import org.apache.camel.component.properties.PropertiesComponent;
+
+public class MySecureRoute extends RouteBuilder {
+    @Override
+    public void configure() {
+        JasyptPropertiesParser jasypt = new JasyptPropertiesParser();
+        jasypt.setPassword("secret");
+
+        PropertiesComponent component = (PropertiesComponent) 
getContext().getPropertiesComponent();
+        jasypt.setPropertiesComponent(component);
+        component.setPropertiesParser(jasypt);
+
+        from("timer:tick?period=5s")
+            .to("{{my.secret}}");
+    }
+}
+----
+
+NOTE: If you call `setLocation(...)` on the `PropertiesComponent` to specify a 
custom configuration file location using the `classpath:` prefix,
+you must add the file to `quarkus.native.resources.includes` so that it can be 
loaded in native mode.
+
+
+[id="extensions-jasypt-additional-camel-quarkus-configuration"]
+== Additional Camel Quarkus configuration
+
+[width="100%",cols="80,5,15",options="header"]
+|===
+| Configuration property | Type | Default
+
+
+| 
[[quarkus.camel.jasypt.enabled]]`link:#quarkus.camel.jasypt.enabled[quarkus.camel.jasypt.enabled]`
+
+Setting this option to false will disable Jasypt integration with Quarkus 
SmallRye configuration. You can however, manually configure Jasypt with Camel 
in the 'classic' way of manually configuring JasyptPropertiesParser and 
PropertiesComponent. Refer to the usage section for more details.
+| `boolean`
+| `true`
+
+| 
[[quarkus.camel.jasypt.algorithm]]`link:#quarkus.camel.jasypt.algorithm[quarkus.camel.jasypt.algorithm]`
+
+The algorithm to be used for decryption.
+| `string`
+| `PBEWithMD5AndDES`
+
+| 
[[quarkus.camel.jasypt.password]]`link:#quarkus.camel.jasypt.password[quarkus.camel.jasypt.password]`
+
+The master password used by Jasypt for decrypting configuration values. This 
option supports prefixes which influence the master password lookup behaviour.
+
+`sys:` will to look up the value from a JVM system property. `sysenv:` will 
look up the value from the OS system environment with the given key.
+| `string`
+| 
+
+| 
[[quarkus.camel.jasypt.random-iv-generator-algorithm]]`link:#quarkus.camel.jasypt.random-iv-generator-algorithm[quarkus.camel.jasypt.random-iv-generator-algorithm]`
+
+Configures the Jasypt StandardPBEStringEncryptor with a RandomIvGenerator 
using the given algorithm.
+| `string`
+| `SHA1PRNG`
+
+| 
[[quarkus.camel.jasypt.random-salt-generator-algorithm]]`link:#quarkus.camel.jasypt.random-salt-generator-algorithm[quarkus.camel.jasypt.random-salt-generator-algorithm]`
+
+Configures the Jasypt StandardPBEStringEncryptor with a RandomSaltGenerator 
using the given algorithm.
+| `string`
+| `SHA1PRNG`
+
+| 
[[quarkus.camel.jasypt.configuration-customizer-class-name]]`link:#quarkus.camel.jasypt.configuration-customizer-class-name[quarkus.camel.jasypt.configuration-customizer-class-name]`
+
+The fully qualified class name of an 
org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer 
implementation. This provides the optional capability of having full control 
over the Jasypt configuration.
+| `string`
+| 
+|===
+
+[.configuration-legend]
+{doc-link-icon-lock}[title=Fixed at build time] Configuration property fixed 
at build time. All other configuration properties are overridable at runtime.
+
diff --git 
a/extensions-jvm/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java
 
b/extensions-jvm/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java
deleted file mode 100644
index 67ede49a0d..0000000000
--- 
a/extensions-jvm/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.camel.quarkus.component.jasypt.deployment;
-
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.annotations.ExecutionTime;
-import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;
-import org.apache.camel.quarkus.core.JvmOnlyRecorder;
-import org.jboss.logging.Logger;
-
-class JasyptProcessor {
-
-    private static final Logger LOG = Logger.getLogger(JasyptProcessor.class);
-    private static final String FEATURE = "camel-jasypt";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-
-    /**
-     * Remove this once this extension starts supporting the native mode.
-     */
-    @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
-    @Record(value = ExecutionTime.RUNTIME_INIT)
-    void warnJvmInNative(JvmOnlyRecorder recorder) {
-        JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time
-        recorder.warnJvmInNative(FEATURE); // warn at runtime
-    }
-}
diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml
index 277bfbf7f3..bbdf41406a 100644
--- a/extensions-jvm/pom.xml
+++ b/extensions-jvm/pom.xml
@@ -70,7 +70,6 @@
         <module>iec60870</module>
         <module>ignite</module>
         <module>irc</module>
-        <module>jasypt</module>
         <module>jcr</module>
         <module>jgroups</module>
         <module>jgroups-raft</module>
diff --git a/extensions-jvm/jasypt/deployment/pom.xml 
b/extensions/jasypt/deployment/pom.xml
similarity index 72%
rename from extensions-jvm/jasypt/deployment/pom.xml
rename to extensions/jasypt/deployment/pom.xml
index 4029430a82..e3de7f9f30 100644
--- a/extensions-jvm/jasypt/deployment/pom.xml
+++ b/extensions/jasypt/deployment/pom.xml
@@ -38,6 +38,16 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-jasypt</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5-internal</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-direct</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -55,6 +65,18 @@
                     </annotationProcessorPaths>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <environmentVariables>
+                        <JASYPT_DECRYPT_SECRET>2s3cr3t</JASYPT_DECRYPT_SECRET>
+                    </environmentVariables>
+                    <systemPropertyVariables>
+                        <jasyptDecryptSecret>2s3cr3t</jasyptDecryptSecret>
+                    </systemPropertyVariables>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
diff --git 
a/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java
 
b/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java
new file mode 100644
index 0000000000..c8a3cfe6b7
--- /dev/null
+++ 
b/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.deployment;
+
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.apache.camel.quarkus.component.jasypt.CamelJasyptConfig;
+import org.apache.camel.quarkus.component.jasypt.CamelJasyptRecorder;
+import org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer;
+import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainBuildItem;
+import 
org.apache.camel.quarkus.core.deployment.spi.RuntimeCamelContextCustomizerBuildItem;
+import org.jboss.jandex.ClassInfo;
+
+class JasyptProcessor {
+    private static final String FEATURE = "camel-jasypt";
+
+    @BuildStep
+    FeatureBuildItem feature() {
+        return new FeatureBuildItem(FEATURE);
+    }
+
+    @BuildStep
+    void registerForReflection(
+            CombinedIndexBuildItem combinedIndex,
+            BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
+        combinedIndex.getIndex()
+                .getAllKnownImplementors(JasyptConfigurationCustomizer.class)
+                .stream()
+                .map(ClassInfo::name)
+                .forEach(className -> {
+                    
reflectiveClass.produce(ReflectiveClassBuildItem.builder(className.toString()).build());
+                });
+    }
+
+    @Record(ExecutionTime.RUNTIME_INIT)
+    @BuildStep
+    void disableCamelMainAutoConfigFromSysEnv(
+            CamelMainBuildItem camelMain,
+            CamelJasyptConfig config,
+            CamelJasyptRecorder recorder) {
+        // Avoid camel-main overriding system / environment config values that 
were already resolved by SmallRye config.
+        // Else there's the potential for encrypted property values to be 
overridden with their raw ENC(..) form
+        recorder.disableCamelMainAutoConfigFromSysEnv(camelMain.getInstance(), 
config);
+    }
+
+    @Record(ExecutionTime.RUNTIME_INIT)
+    @BuildStep
+    RuntimeCamelContextCustomizerBuildItem 
propertiesComponentRuntimeCamelContextCustomizer(
+            CamelJasyptConfig config,
+            CamelJasyptRecorder recorder) {
+        return new 
RuntimeCamelContextCustomizerBuildItem(recorder.createPropertiesComponentCamelContextCustomizer(config));
+    }
+}
diff --git 
a/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDisabledTest.java
 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDisabledTest.java
new file mode 100644
index 0000000000..e73b75651f
--- /dev/null
+++ 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDisabledTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import io.quarkus.test.QuarkusUnitTest;
+import jakarta.inject.Inject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class JasyptDisabledTest {
+    private static final String SECURE_CONFIG_VALUE = "ENC(SomeSecureContent)";
+
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            .overrideConfigKey("quarkus.camel.jasypt.enabled", "false")
+            .overrideConfigKey("secure.config.property", 
"ENC(SomeSecureContent)")
+            .setArchiveProducer(() -> 
ShrinkWrap.create(JavaArchive.class).addClass(JasyptRoutes.class));
+
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Test
+    void propertyNotDecryptedIfJasyptDisabled() {
+        String result = producerTemplate.requestBody("direct:start", null, 
String.class);
+        assertEquals("Secure config value: " + SECURE_CONFIG_VALUE, result);
+    }
+
+    public static final class JasyptRoutes extends RouteBuilder {
+        @Override
+        public void configure() {
+            from("direct:start")
+                    .setBody().simple("Secure config value: 
${properties:secure.config.property}");
+        }
+    }
+}
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordNotProvidedTest.java
similarity index 57%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordNotProvidedTest.java
index 05917263ab..e7af5c50a6 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordNotProvidedTest.java
@@ -14,21 +14,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.jasypt.it;
+package org.apache.camel.quarkus.component.jasypt;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
+import io.quarkus.test.QuarkusUnitTest;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@QuarkusTest
-class JasyptTest {
+public class JasyptPasswordNotProvidedTest {
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            .setExpectedException(IllegalStateException.class)
+            .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
 
     @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+    void passwordNotProvidedThrowsException() {
+        // Nothing to test as we just verify the application fails to start
     }
-
 }
diff --git 
a/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordSysEnvPrefixTest.java
 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordSysEnvPrefixTest.java
new file mode 100644
index 0000000000..33869b9926
--- /dev/null
+++ 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordSysEnvPrefixTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import io.quarkus.test.QuarkusUnitTest;
+import jakarta.inject.Inject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class JasyptPasswordSysEnvPrefixTest {
+    private static final String PASSWORD_VAR_NAME = "JASYPT_DECRYPT_SECRET";
+
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            .overrideConfigKey("quarkus.camel.jasypt.password", "sysenv:" + 
PASSWORD_VAR_NAME)
+            .overrideConfigKey("secure.config", 
"ENC(GKJfy64eBDzxUuQCfArd6OjnAaW/oM9e)")
+            .setArchiveProducer(() -> 
ShrinkWrap.create(JavaArchive.class).addClass(JasyptRoutes.class));
+
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Test
+    void passwordResolvedFromEnvironment() {
+        String result = producerTemplate.requestBody("direct:start", null, 
String.class);
+        Assertions.assertEquals("Hello World", result);
+    }
+
+    public static final class JasyptRoutes extends RouteBuilder {
+        @Override
+        public void configure() throws Exception {
+            from("direct:start")
+                    .setBody().simple("${properties:secure.config}");
+        }
+    }
+}
diff --git 
a/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordSysPrefixTest.java
 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordSysPrefixTest.java
new file mode 100644
index 0000000000..ec27bb1c06
--- /dev/null
+++ 
b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptPasswordSysPrefixTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import io.quarkus.test.QuarkusUnitTest;
+import jakarta.inject.Inject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class JasyptPasswordSysPrefixTest {
+    private static final String PASSWORD_PROPERTY_NAME = "jasyptDecryptSecret";
+
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            .overrideConfigKey("quarkus.camel.jasypt.password", "sys:" + 
PASSWORD_PROPERTY_NAME)
+            .overrideConfigKey("secure.config", 
"ENC(GKJfy64eBDzxUuQCfArd6OjnAaW/oM9e)")
+            .setArchiveProducer(() -> 
ShrinkWrap.create(JavaArchive.class).addClass(JasyptRoutes.class));
+
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Test
+    void passwordResolvedFromSystemProperty() {
+        String result = producerTemplate.requestBody("direct:start", null, 
String.class);
+        Assertions.assertEquals("Hello World", result);
+    }
+
+    public static final class JasyptRoutes extends RouteBuilder {
+        @Override
+        public void configure() throws Exception {
+            from("direct:start")
+                    .setBody().simple("${properties:secure.config}");
+        }
+    }
+}
diff --git a/extensions-jvm/jasypt/pom.xml b/extensions/jasypt/pom.xml
similarity index 96%
copy from extensions-jvm/jasypt/pom.xml
copy to extensions/jasypt/pom.xml
index b40be53f52..55ccfc62ce 100644
--- a/extensions-jvm/jasypt/pom.xml
+++ b/extensions/jasypt/pom.xml
@@ -21,7 +21,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-extensions-jvm</artifactId>
+        <artifactId>camel-quarkus-extensions</artifactId>
         <version>3.7.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
diff --git a/extensions-jvm/jasypt/runtime/pom.xml 
b/extensions/jasypt/runtime/pom.xml
similarity index 93%
rename from extensions-jvm/jasypt/runtime/pom.xml
rename to extensions/jasypt/runtime/pom.xml
index 560514d674..6be4d12c2f 100644
--- a/extensions-jvm/jasypt/runtime/pom.xml
+++ b/extensions/jasypt/runtime/pom.xml
@@ -32,6 +32,7 @@
 
     <properties>
         <camel.quarkus.jvmSince>1.2.0</camel.quarkus.jvmSince>
+        <camel.quarkus.nativeSince>3.7.0</camel.quarkus.nativeSince>
     </properties>
 
     <dependencies>
@@ -43,6 +44,11 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-jasypt</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.graalvm.sdk</groupId>
+            <artifactId>graal-sdk</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/extensions/jasypt/runtime/src/main/doc/usage.adoc 
b/extensions/jasypt/runtime/src/main/doc/usage.adoc
new file mode 100644
index 0000000000..3595bb06f5
--- /dev/null
+++ b/extensions/jasypt/runtime/src/main/doc/usage.adoc
@@ -0,0 +1,135 @@
+The configuration of Jasypt in Camel Quarkus is driven by 
<<extensions-jasypt-additional-camel-quarkus-configuration,configuration 
properties>>.
+
+The minimum expectation is that you provide a master password for Jasypt 
decryption with configuration property `quarkus.camel.jasypt.password`.
+
+You can choose the encryption algorithm and other aspects of the Jasypt 
configuration via the `quarkus.camel.jasypt` options described below.
+
+By default, you do not need to write custom code to configure the Camel 
`JasyptPropertiesParser` or `PropertiesComponent`. This is done for you 
automatically.
+
+Any Camel configuration property added to `application.properties` can be 
secured with Jasypt.
+To encrypt a value, there is a utility that can be run with 
https://www.jbang.dev/[JBang].
+
+[source]
+----
+jbang org.apache.camel:camel-jasypt:{camel-version} -c encrypt -p 
secret-password -i "Some secret content"
+----
+
+IMPORTANT: If you choose to use a different Jasypt algorithm to the default 
(`PBEWithMD5AndDES`), you must provide `-a` (algorithm), `-riga` (IV generator 
algorithm) & `-rsga` (Salt generator algorithm)
+arguments to set the correct algorithms used in encryption. Else your 
application will not be able to decrypt configuration values.
+
+Configuration properties can be added to `application.properties` with the 
encrypted value enclosed within `ENC()` For example.
+
+[source]
+----
+my.secret = ENC(BoDSRQfdBME4V/AcugPOkaR+IcyKufGz)
+----
+
+In your Camel routes, you can refer to the property name using the standard 
placeholder syntax and its value will get decrypted.
+
+[source,java]
+----
+public class MySecureRoute extends RouteBuilder {
+    @Override
+    public void configure() {
+        from("timer:tick?period=5s")
+            .to("{{my.secret}}");
+    }
+}
+----
+
+TIP: You can use the ability to mask security sensitive configuration in Camel 
by suffixing property values with `.secret`.
+You can also disable the startup configuration summary with the configuration 
`camel.main.autoConfigurationLogSummary = false`.
+
+==== Injecting encrypted configuration
+
+You can use the `@ConfigProperty` annotation to inject encrypted configuration 
into your Camel routes or CDI beans.
+
+[source,java]
+----
+@ApplicationScoped
+public class MySecureRoute extends RouteBuilder {
+    @ConfigInject("my.secret")
+    String mySecret;
+
+    @Override
+    public void configure() {
+        from("timer:tick?period=5s")
+            .to(mySecret);
+    }
+}
+----
+
+==== Securing alternate configuration sources
+
+If you prefer to keep your secret configuration in a file separate to 
`application.properties`,
+you can use the `quarkus.config.locations` configuration option to specify 
additional configuration files.
+
+In native mode you must also add any additional configuration file resource 
paths to `quarkus.native.resources.includes`.
+
+==== Finer control of Jasypt configuration
+
+If you require finer control of the Jasypt configuration than that provided by 
the default configuration, the following options are available.
+
+===== JasyptConfigurationCustomizer
+
+Implement a `JasyptConfigurationCustomizer` class to customize any aspect of 
the Jasypt `EnvironmentStringPBEConfig`.
+
+[source,java]
+----
+package org.acme;
+
+import org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer;
+import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.salt.RandomSaltGenerator;
+
+public class JasyptConfigurationCustomizer implements 
JasyptConfigurationCustomizer {
+    public void customize(EnvironmentStringPBEConfig config) {
+        // Custom algorithms
+        config.setAlgorithm("PBEWithHmacSHA256AndAES_256");
+        config.setSaltGenerator(new RandomSaltGenerator("PKCS11"));
+        config.setIvGenerator(new RandomIvGenerator("PKCS11"));
+        // Additional customizations...
+    }
+}
+----
+
+In `application.properties` add the 
`quarkus.camel.jasypt.configuration-customizer-class-name` configuration 
property.
+
+[source]
+----
+quarkus.camel.jasypt.configuration-customizer-class-name = 
org.acme.MyJasyptEncryptorCustomizer
+----
+
+===== Disabling automatic Jasypt configuration
+
+If you prefer to use the 'classic' Java DSL way of configuring Camel Jasypt, 
you can disable the automatic configuration with `quarkus.camel.jasypt.enabled 
= false`.
+
+This allows you to configure the Camel `JasyptPropertiesParser` and 
`PropertiesComponent` manually.
+
+NOTE: In this mode, you cannot use the `@ConfigProperty` annotation to inject 
encrypted configuration properties.
+
+[source,java]
+----
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.jasypt.JasyptPropertiesParser;
+import org.apache.camel.component.properties.PropertiesComponent;
+
+public class MySecureRoute extends RouteBuilder {
+    @Override
+    public void configure() {
+        JasyptPropertiesParser jasypt = new JasyptPropertiesParser();
+        jasypt.setPassword("secret");
+
+        PropertiesComponent component = (PropertiesComponent) 
getContext().getPropertiesComponent();
+        jasypt.setPropertiesComponent(component);
+        component.setPropertiesParser(jasypt);
+
+        from("timer:tick?period=5s")
+            .to("{{my.secret}}");
+    }
+}
+----
+
+NOTE: If you call `setLocation(...)` on the `PropertiesComponent` to specify a 
custom configuration file location using the `classpath:` prefix,
+you must add the file to `quarkus.native.resources.includes` so that it can be 
loaded in native mode.
diff --git 
a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfig.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfig.java
new file mode 100644
index 0000000000..59dca19203
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfig.java
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import java.util.Optional;
+
+import io.quarkus.runtime.annotations.ConfigItem;
+import io.quarkus.runtime.annotations.ConfigPhase;
+import io.quarkus.runtime.annotations.ConfigRoot;
+import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.salt.RandomSaltGenerator;
+
+/**
+ * Note: This class exists mainly for documentation purposes. The actual 
configuration values
+ * are read via the SmallRye config internals within the SecretKeysHandler.
+ */
+@ConfigRoot(name = "camel.jasypt", phase = ConfigPhase.RUN_TIME)
+public class CamelJasyptConfig {
+    static final String NAME = "camel-jasypt";
+    static final String DEFAULT_ALGORITHM = 
StandardPBEByteEncryptor.DEFAULT_ALGORITHM;
+
+    /**
+     * Setting this option to false will disable Jasypt integration with 
Quarkus SmallRye configuration.
+     * You can however, manually configure Jasypt with Camel in the 'classic' 
way of manually configuring
+     * JasyptPropertiesParser and PropertiesComponent. Refer to the usage 
section for more details.
+     */
+    @ConfigItem(defaultValue = "true")
+    public boolean enabled;
+
+    /**
+     * The algorithm to be used for decryption.
+     */
+    @ConfigItem(defaultValue = DEFAULT_ALGORITHM)
+    public String algorithm;
+
+    /**
+     * The master password used by Jasypt for decrypting configuration values.
+     * This option supports prefixes which influence the master password 
lookup behaviour.
+     * <p>
+     * <code>sys:</code> will to look up the value from a JVM system property.
+     * <code>sysenv:</code> will look up the value from the OS system 
environment with the given key.
+     * <p>
+     */
+    @ConfigItem
+    public Optional<String> password;
+
+    /**
+     * Configures the Jasypt StandardPBEStringEncryptor with a 
RandomIvGenerator using the given algorithm.
+     */
+    @ConfigItem(defaultValue = 
RandomIvGenerator.DEFAULT_SECURE_RANDOM_ALGORITHM)
+    public String randomIvGeneratorAlgorithm;
+
+    /**
+     * Configures the Jasypt StandardPBEStringEncryptor with a 
RandomSaltGenerator using the given algorithm.
+     */
+    @ConfigItem(defaultValue = 
RandomSaltGenerator.DEFAULT_SECURE_RANDOM_ALGORITHM)
+    public String randomSaltGeneratorAlgorithm;
+
+    /**
+     * The fully qualified class name of an 
org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer
+     * implementation. This provides the optional capability of having full 
control over the Jasypt configuration.
+     */
+    @ConfigItem
+    public Optional<String> configurationCustomizerClassName;
+}
diff --git 
a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java
new file mode 100644
index 0000000000..b6210f813f
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import java.util.OptionalInt;
+
+import io.smallrye.config.ConfigSourceInterceptor;
+import io.smallrye.config.ConfigSourceInterceptorContext;
+import io.smallrye.config.ConfigSourceInterceptorFactory;
+import io.smallrye.config.ConfigValue;
+import io.smallrye.config.Priorities;
+import org.jasypt.properties.PropertyValueEncryptionUtils;
+
+/**
+ * Custom {@link ConfigSourceInterceptorFactory} to preserve the default 
camel-jasypt UX where a property value
+ * can be defined like {@code secret.config=ENC(encrypted-string)}.
+ * SmallRye config requires the secret key handler to be specified on the 
config value. This interceptor fulfils that
+ * requirement for the user automatically.
+ */
+public class CamelJasyptConfigSourceInterceptorFactory implements 
ConfigSourceInterceptorFactory {
+    private boolean enabled = true;
+
+    @Override
+    public ConfigSourceInterceptor 
getInterceptor(ConfigSourceInterceptorContext context) {
+        ConfigValue enabledConfigValue = 
context.proceed("quarkus.camel.jasypt.enabled");
+        if (enabledConfigValue != null) {
+            enabled = Boolean.parseBoolean(enabledConfigValue.getValue());
+        }
+
+        return new ConfigSourceInterceptor() {
+            @Override
+            public ConfigValue getValue(ConfigSourceInterceptorContext 
context, String name) {
+                ConfigValue configValue = context.proceed(name);
+                if (enabled && configValue != null) {
+                    String value = configValue.getValue();
+                    if (PropertyValueEncryptionUtils.isEncryptedValue(value)) {
+                        return 
configValue.withValue("${camel-jasypt::%s}".formatted(value));
+                    }
+                }
+                return configValue;
+            }
+        };
+    }
+
+    @Override
+    public OptionalInt getPriority() {
+        return OptionalInt.of(Priorities.LIBRARY);
+    }
+}
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptPropertiesParserHolder.java
similarity index 56%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptPropertiesParserHolder.java
index 05917263ab..51b8752063 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptPropertiesParserHolder.java
@@ -14,21 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.jasypt.it;
+package org.apache.camel.quarkus.component.jasypt;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import org.apache.camel.component.jasypt.JasyptPropertiesParser;
 
-@QuarkusTest
-class JasyptTest {
+class CamelJasyptPropertiesParserHolder {
+    private static volatile JasyptPropertiesParser INSTANCE;
 
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+    private CamelJasyptPropertiesParserHolder() {
+        // Utility class
     }
 
+    static JasyptPropertiesParser getJasyptPropertiesParser() {
+        if (INSTANCE == null) {
+            synchronized (CamelJasyptPropertiesParserHolder.class) {
+                if (INSTANCE == null) {
+                    INSTANCE = new JasyptPropertiesParser();
+                }
+            }
+        }
+        return INSTANCE;
+    }
 }
diff --git 
a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java
new file mode 100644
index 0000000000..4c67c56e5e
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import io.quarkus.runtime.RuntimeValue;
+import io.quarkus.runtime.annotations.Recorder;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.jasypt.JasyptPropertiesParser;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.main.MainConfigurationProperties;
+import org.apache.camel.quarkus.main.CamelMain;
+import org.apache.camel.spi.CamelContextCustomizer;
+
+@Recorder
+public class CamelJasyptRecorder {
+    public void disableCamelMainAutoConfigFromSysEnv(RuntimeValue<CamelMain> 
camelMainRuntimeValue, CamelJasyptConfig config) {
+        CamelMain main = camelMainRuntimeValue.getValue();
+        MainConfigurationProperties configurationProperties = 
main.getMainConfigurationProperties();
+        
configurationProperties.setAutoConfigurationSystemPropertiesEnabled(false);
+        
configurationProperties.setAutoConfigurationEnvironmentVariablesEnabled(false);
+    }
+
+    public RuntimeValue<CamelContextCustomizer> 
createPropertiesComponentCamelContextCustomizer(CamelJasyptConfig config) {
+        return new RuntimeValue<>(new CamelContextCustomizer() {
+            @Override
+            public void configure(CamelContext camelContext) {
+                if (config.enabled) {
+                    PropertiesComponent component = (PropertiesComponent) 
camelContext.getPropertiesComponent();
+                    JasyptPropertiesParser jasyptPropertiesParser = 
CamelJasyptPropertiesParserHolder
+                            .getJasyptPropertiesParser();
+                    jasyptPropertiesParser.setPropertiesComponent(component);
+                    component.setPropertiesParser(jasyptPropertiesParser);
+                }
+            }
+        });
+    }
+}
diff --git 
a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java
new file mode 100644
index 0000000000..70274adab1
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.Set;
+
+import io.smallrye.config.ConfigSourceContext;
+import io.smallrye.config.ConfigValue;
+import io.smallrye.config.SecretKeysHandler;
+import io.smallrye.config.SecretKeysHandlerFactory;
+import org.apache.camel.component.jasypt.JasyptPropertiesParser;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
+import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
+import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
+import org.jasypt.iv.IvGenerator;
+import org.jasypt.iv.NoIvGenerator;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.salt.RandomSaltGenerator;
+import org.jasypt.salt.SaltGenerator;
+
+import static 
org.apache.camel.quarkus.component.jasypt.CamelJasyptConfig.DEFAULT_ALGORITHM;
+
+public class CamelJasyptSecretKeysHandlerFactory implements 
SecretKeysHandlerFactory {
+    private static final String CONFIG_PREFIX = "quarkus.camel.jasypt.";
+    private static final String SYS_CONFIG_PREFIX = "sys:";
+    private static final String SYS_ENV_CONFIG_PREFIX = "sysenv:";
+    private static final Set<String> ALGORITHMS_THAT_REQUIRE_IV = Set.of(
+            "PBEWITHHMACSHA1ANDAES_128",
+            "PBEWITHHMACSHA1ANDAES_256",
+            "PBEWITHHMACSHA224ANDAES_128",
+            "PBEWITHHMACSHA224ANDAES_256",
+            "PBEWITHHMACSHA256ANDAES_128",
+            "PBEWITHHMACSHA256ANDAES_256",
+            "PBEWITHHMACSHA384ANDAES_128",
+            "PBEWITHHMACSHA384ANDAES_256",
+            "PBEWITHHMACSHA512ANDAES_128",
+            "PBEWITHHMACSHA512ANDAES_256");
+    private final JasyptPropertiesParser parser = 
CamelJasyptPropertiesParserHolder.getJasyptPropertiesParser();
+    private boolean enabled = true;
+
+    @Override
+    public SecretKeysHandler getSecretKeysHandler(ConfigSourceContext context) 
{
+        String enabledValue = getConfigValue(context, "enabled", "true");
+        if (enabledValue != null) {
+            enabled = Boolean.parseBoolean(enabledValue);
+        }
+
+        if (enabled) {
+            configureJasypt(context);
+        }
+
+        return new SecretKeysHandler() {
+            @Override
+            public String decode(String secret) {
+                if (enabled) {
+                    return parser.parseProperty("", secret, null);
+                }
+                return secret;
+            }
+
+            @Override
+            public String getName() {
+                return CamelJasyptConfig.NAME;
+            }
+        };
+    }
+
+    @Override
+    public String getName() {
+        return CamelJasyptConfig.NAME;
+    }
+
+    private void configureJasypt(ConfigSourceContext context) {
+        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
+
+        String algorithm = getAlgorithm(context);
+        config.setPassword(getPassword(context));
+        config.setAlgorithm(algorithm);
+        config.setIvGenerator(getIvGenerator(algorithm, context));
+        config.setSaltGenerator(getSaltGenerator(context));
+        customizeConfiguration(config, context);
+
+        StandardPBEStringEncryptor encryptor = new 
StandardPBEStringEncryptor();
+        encryptor.setConfig(config);
+
+        // Avoid potentially confusing runtime NPEs and fail fast if no 
password has been configured
+        try {
+            config.getPassword();
+        } catch (NullPointerException e) {
+            throw new IllegalStateException("The jasypt password has not been 
configured.");
+        }
+
+        parser.setEncryptor(encryptor);
+    }
+
+    private String getPassword(ConfigSourceContext context) {
+        Optional<String> passwordOptional = getOptionalConfigValue(context, 
"password");
+        if (passwordOptional.isPresent()) {
+            String password = passwordOptional.get();
+            if (ObjectHelper.isNotEmpty(password)) {
+                // Preserve backwards compat with the Camel way of configuring 
the master password
+                if (password.startsWith(SYS_ENV_CONFIG_PREFIX)) {
+                    password = System.getenv(StringHelper.after(password, 
SYS_ENV_CONFIG_PREFIX));
+                }
+
+                if (password.startsWith(SYS_CONFIG_PREFIX)) {
+                    password = System.getProperty(StringHelper.after(password, 
SYS_CONFIG_PREFIX));
+                }
+            }
+            return password;
+        }
+        return null;
+    }
+
+    private String getAlgorithm(ConfigSourceContext context) {
+        return getConfigValue(context, "algorithm", DEFAULT_ALGORITHM);
+    }
+
+    private IvGenerator getIvGenerator(String algorithm, ConfigSourceContext 
context) {
+        if (ObjectHelper.isNotEmpty(algorithm) && 
ALGORITHMS_THAT_REQUIRE_IV.contains(algorithm.toUpperCase())) {
+            String ivGeneratorAlgorithm = getConfigValue(context, 
"random-iv-generator-algorithm",
+                    RandomSaltGenerator.DEFAULT_SECURE_RANDOM_ALGORITHM);
+            return new RandomIvGenerator(ivGeneratorAlgorithm);
+        }
+        return new NoIvGenerator();
+    }
+
+    private SaltGenerator getSaltGenerator(ConfigSourceContext context) {
+        String algorithm = getConfigValue(context, 
"random-salt-generator-algorithm",
+                RandomSaltGenerator.DEFAULT_SECURE_RANDOM_ALGORITHM);
+        return new RandomSaltGenerator(algorithm);
+    }
+
+    private void customizeConfiguration(EnvironmentStringPBEConfig config, 
ConfigSourceContext context) {
+        Optional<String> customizerClassName = getOptionalConfigValue(context, 
"configuration-customizer-class-name");
+        if (customizerClassName.isPresent()) {
+            try {
+                Class<?> encryptorClass = 
Thread.currentThread().getContextClassLoader().loadClass(customizerClassName.get());
+                JasyptConfigurationCustomizer customizer = 
(JasyptConfigurationCustomizer) encryptorClass
+                        .getDeclaredConstructor().newInstance();
+                customizer.customize(config);
+            } catch (ClassNotFoundException | InvocationTargetException | 
InstantiationException | IllegalAccessException
+                    | NoSuchMethodException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private String getConfigValue(ConfigSourceContext context, String key, 
String defaultValue) {
+        String configKey = CONFIG_PREFIX + key;
+        ConfigValue value = context.getValue(configKey);
+        if (value != null) {
+            return value.getValue();
+        }
+        if (defaultValue != null) {
+            return defaultValue;
+        }
+        throw new NoSuchElementException("Property value for %s was not 
found".formatted(configKey));
+    }
+
+    private Optional<String> getOptionalConfigValue(ConfigSourceContext 
context, String key) {
+        ConfigValue value = context.getValue(CONFIG_PREFIX + key);
+        if (value != null) {
+            return Optional.of(value.getValue());
+        }
+        return Optional.empty();
+    }
+}
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/JasyptConfigurationCustomizer.java
similarity index 66%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/JasyptConfigurationCustomizer.java
index 05917263ab..4fe1e6ac4a 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/JasyptConfigurationCustomizer.java
@@ -14,21 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.jasypt.it;
+package org.apache.camel.quarkus.component.jasypt;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
 
+public interface JasyptConfigurationCustomizer {
+    void customize(EnvironmentStringPBEConfig config);
 }
diff --git 
a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/graal/JasyptSubstitutions.java
 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/graal/JasyptSubstitutions.java
new file mode 100644
index 0000000000..7b7a3ade85
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/graal/JasyptSubstitutions.java
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.graal;
+
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+
+import com.oracle.svm.core.annotate.Alias;
+import com.oracle.svm.core.annotate.Inject;
+import com.oracle.svm.core.annotate.InjectAccessors;
+import com.oracle.svm.core.annotate.RecomputeFieldValue;
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import com.oracle.svm.core.annotate.TargetElement;
+import org.jasypt.exceptions.EncryptionInitializationException;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.normalization.Normalizer;
+import org.jasypt.salt.RandomSaltGenerator;
+
+import static java.text.Normalizer.normalize;
+import static java.text.Normalizer.Form.NFC;
+
+public class JasyptSubstitutions {
+    @TargetClass(Normalizer.class)
+    static final class NormalizerSubstitutions {
+        @Substitute
+        public static char[] normalizeToNfc(final char[] message) {
+            final String messageStr = new String(message);
+            final String result;
+            try {
+                result = normalize(messageStr, NFC);
+            } catch (final Exception e) {
+                throw new EncryptionInitializationException("Could not perform 
a valid UNICODE normalization", e);
+            }
+            return result.toCharArray();
+        }
+    }
+
+    @TargetClass(RandomIvGenerator.class)
+    static final class RandomIvGeneratorSubstitutions {
+        @Alias
+        @InjectAccessors(SecureRandomAccessor.class)
+        private SecureRandom random;
+        @Inject
+        @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
+        String secureRandomAlgorithm;
+
+        @Substitute
+        @TargetElement(name = TargetElement.CONSTRUCTOR_NAME)
+        public RandomIvGeneratorSubstitutions(final String 
secureRandomAlgorithm) {
+            this.secureRandomAlgorithm = secureRandomAlgorithm;
+        }
+    }
+
+    @TargetClass(RandomSaltGenerator.class)
+    static final class RandomSaltGeneratorSubstitutions {
+        @Alias
+        @InjectAccessors(SecureRandomAccessor.class)
+        private SecureRandom random;
+        @Inject
+        @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
+        String secureRandomAlgorithm;
+
+        @Substitute
+        @TargetElement(name = TargetElement.CONSTRUCTOR_NAME)
+        public RandomSaltGeneratorSubstitutions(final String 
secureRandomAlgorithm) {
+            this.secureRandomAlgorithm = secureRandomAlgorithm;
+        }
+    }
+}
+
+class SecureRandomAccessor {
+    private static volatile SecureRandom RANDOM;
+    private static final String DEFAULT_ALGORITHM = "SHA1PRNG";
+
+    static SecureRandom get(Object instance) {
+        SecureRandom result = RANDOM;
+        if (result == null) {
+            result = initializeOnce(getAlgorithm(instance));
+        }
+        return result;
+    }
+
+    static void set(Object instance, SecureRandom secureRandom) {
+        throw new UnsupportedOperationException();
+    }
+
+    private static synchronized SecureRandom initializeOnce(String algorithm) {
+        SecureRandom result = RANDOM;
+        if (result != null) {
+            return result;
+        }
+
+        try {
+            result = SecureRandom.getInstance(algorithm);
+            RANDOM = result;
+            return result;
+        } catch (NoSuchAlgorithmException e) {
+            throw new EncryptionInitializationException(e);
+        }
+    }
+
+    private static String getAlgorithm(Object instance) {
+        if (instance instanceof 
JasyptSubstitutions.RandomIvGeneratorSubstitutions) {
+            return ((JasyptSubstitutions.RandomIvGeneratorSubstitutions) 
(instance)).secureRandomAlgorithm;
+        } else if (instance instanceof 
JasyptSubstitutions.RandomSaltGeneratorSubstitutions) {
+            return ((JasyptSubstitutions.RandomSaltGeneratorSubstitutions) 
(instance)).secureRandomAlgorithm;
+        } else {
+            return DEFAULT_ALGORITHM;
+        }
+    }
+}
diff --git 
a/extensions-jvm/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
 b/extensions/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
similarity index 97%
copy from 
extensions-jvm/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
copy to 
extensions/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
index eefabec931..bb13aa6f0a 100644
--- 
a/extensions-jvm/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ 
b/extensions/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -25,9 +25,8 @@ name: "Camel Jasypt"
 description: "Security using Jasypt"
 metadata:
   icon-url: 
"https://raw.githubusercontent.com/apache/camel-website/main/antora-ui-camel/src/img/logo-d.svg";
-  unlisted: true
   guide: 
"https://camel.apache.org/camel-quarkus/latest/reference/extensions/jasypt.html";
   categories:
   - "integration"
   status:
-  - "preview"
+  - "stable"
diff --git 
a/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.ConfigSourceInterceptorFactory
 
b/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.ConfigSourceInterceptorFactory
new file mode 100644
index 0000000000..c3222d1ab9
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.ConfigSourceInterceptorFactory
@@ -0,0 +1 @@
+org.apache.camel.quarkus.component.jasypt.CamelJasyptConfigSourceInterceptorFactory
\ No newline at end of file
diff --git 
a/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.SecretKeysHandlerFactory
 
b/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.SecretKeysHandlerFactory
new file mode 100644
index 0000000000..95200099fe
--- /dev/null
+++ 
b/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.SecretKeysHandlerFactory
@@ -0,0 +1 @@
+org.apache.camel.quarkus.component.jasypt.CamelJasyptSecretKeysHandlerFactory
\ No newline at end of file
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 0c593ff64c..d2be4bb09d 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -131,6 +131,7 @@
         <module>jackson-avro</module>
         <module>jackson-protobuf</module>
         <module>jacksonxml</module>
+        <module>jasypt</module>
         <module>java-joor-dsl</module>
         <module>jaxb</module>
         <module>jcache</module>
diff --git a/integration-tests-jvm/jasypt/pom.xml 
b/integration-tests-jvm/jasypt/pom.xml
deleted file mode 100644
index f96488e0fb..0000000000
--- a/integration-tests-jvm/jasypt/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-build-parent-it</artifactId>
-        <version>3.7.0-SNAPSHOT</version>
-        <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
-    </parent>
-
-    <artifactId>camel-quarkus-integration-test-jasypt</artifactId>
-    <name>Camel Quarkus :: Integration Tests :: Jasypt</name>
-    <description>Integration tests for Camel Quarkus Jasypt 
extension</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-jasypt</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-resteasy</artifactId>
-        </dependency>
-
-        <!-- test dependencies -->
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-junit5</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.rest-assured</groupId>
-            <artifactId>rest-assured</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <profiles>
-        <profile>
-            <id>virtualDependencies</id>
-            <activation>
-                <property>
-                    <name>!noVirtualDependencies</name>
-                </property>
-            </activation>
-            <dependencies>
-                <!-- The following dependencies guarantee that this module is 
built after them. You can update them by running `mvn process-resources 
-Pformat -N` from the source tree root directory -->
-                <dependency>
-                    <groupId>org.apache.camel.quarkus</groupId>
-                    <artifactId>camel-quarkus-jasypt-deployment</artifactId>
-                    <version>${project.version}</version>
-                    <type>pom</type>
-                    <scope>test</scope>
-                    <exclusions>
-                        <exclusion>
-                            <groupId>*</groupId>
-                            <artifactId>*</artifactId>
-                        </exclusion>
-                    </exclusions>
-                </dependency>
-            </dependencies>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/integration-tests-jvm/pom.xml b/integration-tests-jvm/pom.xml
index cabd8985a3..5baebd69ce 100644
--- a/integration-tests-jvm/pom.xml
+++ b/integration-tests-jvm/pom.xml
@@ -69,7 +69,6 @@
         <module>iec60870</module>
         <module>ignite</module>
         <module>irc</module>
-        <module>jasypt</module>
         <module>jcr</module>
         <module>jgroups</module>
         <module>jgroups-raft</module>
diff --git a/integration-tests/jasypt/pom.xml b/integration-tests/jasypt/pom.xml
new file mode 100644
index 0000000000..59b80db882
--- /dev/null
+++ b/integration-tests/jasypt/pom.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.camel.quarkus</groupId>
+        <artifactId>camel-quarkus-build-parent-it</artifactId>
+        <version>3.7.0-SNAPSHOT</version>
+        <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>camel-quarkus-integration-test-jasypt</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: Jasypt</name>
+    <description>Integration tests for Camel Quarkus Jasypt 
extension</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-direct</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-jasypt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-mock</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-timer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-xml-io-dsl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-yaml-dsl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-resteasy</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-agroal</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-jdbc-h2</artifactId>
+        </dependency>
+
+        <!-- test dependencies -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-test-h2</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>virtualDependencies</id>
+            <activation>
+                <property>
+                    <name>!noVirtualDependencies</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- The following dependencies guarantee that this module is 
built after them. You can update them by running `mvn process-resources 
-Pformat -N` from the source tree root directory -->
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-direct-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-jasypt-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-mock-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-timer-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    
<artifactId>camel-quarkus-xml-io-dsl-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-yaml-dsl-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>native</id>
+            <activation>
+                <property>
+                    <name>native</name>
+                </property>
+            </activation>
+            <properties>
+                <quarkus.package.type>native</quarkus.package.type>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/AlgorithmUtils.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/AlgorithmUtils.java
index 05917263ab..bf2d087270 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/AlgorithmUtils.java
@@ -16,19 +16,14 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import org.apache.camel.util.FileUtil;
 
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+public class AlgorithmUtils {
+    private AlgorithmUtils() {
+        // Utility class
     }
 
+    public static String getPRNGAlgorithm() {
+        return FileUtil.isWindows() ? "Windows-PRNG" : "NativePRNG";
+    }
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/CustomJasyptConfigurationCustomizer.java
similarity index 53%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/CustomJasyptConfigurationCustomizer.java
index 05917263ab..f6a1f9b7fd 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/CustomJasyptConfigurationCustomizer.java
@@ -16,19 +16,17 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer;
+import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.salt.RandomSaltGenerator;
 
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+public class CustomJasyptConfigurationCustomizer implements 
JasyptConfigurationCustomizer {
+    @Override
+    public void customize(EnvironmentStringPBEConfig 
environmentStringPBEConfig) {
+        String prngAlgorithm = AlgorithmUtils.getPRNGAlgorithm();
+        environmentStringPBEConfig.setAlgorithm("PBEWithHmacSHA256AndAES_256");
+        environmentStringPBEConfig.setIvGenerator(new 
RandomIvGenerator(prngAlgorithm));
+        environmentStringPBEConfig.setSaltGenerator(new 
RandomSaltGenerator(prngAlgorithm));
     }
-
 }
diff --git 
a/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationRoutes.java
 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationRoutes.java
new file mode 100644
index 0000000000..4f9e84dad2
--- /dev/null
+++ 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationRoutes.java
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jasypt.JasyptPropertiesParser;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+public class JasyptManualConfigurationRoutes extends RouteBuilder {
+    @ConfigProperty(name = "quarkus.camel.jasypt.enabled")
+    boolean jasyptIntegrationEnabled;
+
+    @Override
+    public void configure() throws Exception {
+        // Only enable when the automatic Jasypt config integration is disabled
+        if (!jasyptIntegrationEnabled) {
+            JasyptPropertiesParser jasypt = new JasyptPropertiesParser();
+            jasypt.setPassword("2s3cr3t");
+
+            PropertiesComponent component = (PropertiesComponent) 
getContext().getPropertiesComponent();
+            jasypt.setPropertiesComponent(component);
+            component.setPropertiesParser(jasypt);
+
+            from("direct:decryptManualConfiguration")
+                    .setBody().simple("{{greeting.secret}}");
+
+            from("direct:decryptManualConfigurationExpression")
+                    .setBody().simple("{{greeting.expression.secret}}");
+        }
+    }
+}
diff --git 
a/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptResource.java
 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptResource.java
new file mode 100644
index 0000000000..80b2c7c1fa
--- /dev/null
+++ 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptResource.java
@@ -0,0 +1,112 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Optional;
+
+import io.agroal.api.AgroalDataSource;
+import io.quarkus.arc.Arc;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.direct.DirectComponent;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.eclipse.microprofile.config.ConfigProvider;
+
+@Path("/jasypt")
+public class JasyptResource {
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Inject
+    CamelContext camelContext;
+
+    @Path("/decrypt/configuration/{configKey}")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String decryptConfiguration(
+            @PathParam("configKey") String configKey,
+            @QueryParam("endpointURI") String endpointURI) {
+        return producerTemplate.requestBodyAndHeader(endpointURI, null, 
"config.key", configKey, String.class);
+    }
+
+    @Path("/decrypt/injected/configuration/{endpointUri}")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String decryptConfiguration(@PathParam("endpointUri") String 
endpointUri) {
+        return producerTemplate.requestBody(endpointUri, null, String.class);
+    }
+
+    @Path("/decrypt/configuration-from-provider/{configKey}")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String 
decryptConfigurationFromConfigProvider(@PathParam("configKey") String 
configKey) {
+        Optional<String> optional = 
ConfigProvider.getConfig().getOptionalValue(configKey, String.class);
+        return optional.orElse(null);
+    }
+
+    @Path("/timer/mock/results")
+    @GET
+    public void assertMockEndpoint(@QueryParam("expectedMessageCount") int 
expectedMessageCount) throws Exception {
+        MockEndpoint endpoint = camelContext.getEndpoint("mock:timerResult", 
MockEndpoint.class);
+        camelContext.getRouteController().startRoute("secret-timer");
+        try {
+            String expectedBody = "delay = 1, repeatCount = 2";
+            endpoint.expectedMessageCount(expectedMessageCount);
+            endpoint.expectedBodiesReceived(expectedBody, expectedBody);
+            endpoint.assertIsSatisfied(10000);
+        } finally {
+            endpoint.reset();
+            camelContext.getRouteController().stopRoute("secret-timer");
+        }
+    }
+
+    @Path("/secure/database")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String connectToSecureDatabase() throws SQLException {
+        AgroalDataSource dataSource = 
Arc.container().instance(AgroalDataSource.class).get();
+        try (Connection connection = dataSource.getConnection()) {
+            try (Statement statement = connection.createStatement()) {
+                try (ResultSet rs = statement.executeQuery("SELECT USER_NAME 
FROM INFORMATION_SCHEMA.USERS")) {
+                    if (rs.next()) {
+                        return rs.getString("USER_NAME").toLowerCase();
+                    }
+                    return null;
+                }
+            }
+        }
+    }
+
+    @Path("/secure/direct/component")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public long directComponentTimeout() {
+        DirectComponent component = camelContext.getComponent("direct", 
DirectComponent.class);
+        return component.getTimeout();
+    }
+}
diff --git 
a/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptRoutes.java
 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptRoutes.java
new file mode 100644
index 0000000000..b6f30e334c
--- /dev/null
+++ 
b/integration-tests/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptRoutes.java
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@ApplicationScoped
+public class JasyptRoutes extends RouteBuilder {
+    @ConfigProperty(name = "greeting.secret")
+    String secretProperty;
+
+    @ConfigProperty(name = "explicit.config.provider.secret")
+    String secretExplicitConfigProviderProperty;
+
+    @Override
+    public void configure() throws Exception {
+        from("direct:decryptConfiguration")
+                .process("decryptConfig")
+                .log("Decrypted: ${body}");
+
+        from("direct:secretPropertyInjection")
+                .setBody().constant(secretProperty)
+                .log("Decrypted: ${body}");
+
+        from("direct:secretExplicitConfigProviderPropertyInjection")
+                .setBody().constant(secretExplicitConfigProviderProperty)
+                .log("Decrypted: ${body}");
+
+        
from("timer:tick?delay={{timer.delay.secret}}&repeatCount={{timer.repeatCount.secret}}").id("secret-timer")
+                .autoStartup(false)
+                .setBody()
+                .simple("delay = ${properties:timer.delay.secret}, repeatCount 
= ${properties:timer.repeatCount.secret}")
+                .log("${body}")
+                .to("mock:timerResult");
+    }
+
+    @Singleton
+    @Named("decryptConfig")
+    Processor decryptConfigProcessor() {
+        return new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                Message message = exchange.getMessage();
+                String configKey = message.getHeader("config.key", 
String.class);
+                exchange.getContext()
+                        .getPropertiesComponent()
+                        .resolveProperty(configKey)
+                        .ifPresent(message::setBody);
+            }
+        };
+    }
+}
diff --git a/integration-tests/jasypt/src/main/resources/application.properties 
b/integration-tests/jasypt/src/main/resources/application.properties
new file mode 100644
index 0000000000..4a46b926f6
--- /dev/null
+++ b/integration-tests/jasypt/src/main/resources/application.properties
@@ -0,0 +1,46 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+# JBang can be used to encrypt property values for testing
+# jbang org.apache.camel:camel-jasypt:4.3.0 -c encrypt -p my-password -i "some 
content to encrypt"
+
+quarkus.native.resources.includes = secret.properties
+quarkus.datasource.devservices.enabled = false
+
+camel.main.routes-include-pattern = 
routes/jasypt-routes.xml,routes/jasypt-routes.yaml
+
+# Jasypt configuration
+quarkus.camel.jasypt.password = 2s3cr3t
+
+# Insure configuration
+insecure.property = Hello World
+
+# Secure custom configuration properties (values translate to: Hello World)
+greeting.secret = ENC(GKJfy64eBDzxUuQCfArd6OjnAaW/oM9e)
+greeting.expression.secret = ${greeting.secret} From Expression
+explicit.config.provider.secret = 
${camel-jasypt::ENC(GKJfy64eBDzxUuQCfArd6OjnAaW/oM9e)}
+
+# Secure Camel endpoint URI properties
+# delay of 1 millisecond
+timer.delay.secret = ENC(fmdsyY2xfsVnz1JL5gvL8A==)
+# repeat 2 times
+timer.repeatCount.secret = ENC(e8n9auBwOA3XuGNZONICkw==)
+
+# Custom profile secret (value translates to: Hello Custom Profile
+# TODO: https://github.com/apache/camel-quarkus/issues/5665
+#%custom-profile.greeting.secret = 
ENC(O8w+UtMRj52Z8PKgJg2tRsE7zFH954LH0GJIayMpr5s=)
+#%custom-profile.greeting.expression.secret = 
${camel-jasypt::ENC(GKJfy64eBDzxUuQCfArd6OjnAaW/oM9e)}
diff --git a/extensions-jvm/jasypt/pom.xml 
b/integration-tests/jasypt/src/main/resources/routes/jasypt-routes.xml
similarity index 54%
rename from extensions-jvm/jasypt/pom.xml
rename to integration-tests/jasypt/src/main/resources/routes/jasypt-routes.xml
index b40be53f52..f9694fcb90 100644
--- a/extensions-jvm/jasypt/pom.xml
+++ b/integration-tests/jasypt/src/main/resources/routes/jasypt-routes.xml
@@ -17,21 +17,9 @@
     limitations under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-extensions-jvm</artifactId>
-        <version>3.7.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>camel-quarkus-jasypt-parent</artifactId>
-    <name>Camel Quarkus :: Jasypt</name>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>deployment</module>
-        <module>runtime</module>
-    </modules>
-</project>
+<routes>
+    <route>
+        <from uri="direct:decryptConfigurationFromXml" />
+        <process ref="decryptConfig" />
+    </route>
+</routes>
diff --git 
a/extensions-jvm/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
 b/integration-tests/jasypt/src/main/resources/routes/jasypt-routes.yaml
similarity index 60%
rename from 
extensions-jvm/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
rename to integration-tests/jasypt/src/main/resources/routes/jasypt-routes.yaml
index eefabec931..f6e2b31630 100644
--- 
a/extensions-jvm/jasypt/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ b/integration-tests/jasypt/src/main/resources/routes/jasypt-routes.yaml
@@ -15,19 +15,9 @@
 # limitations under the License.
 #
 
-# This is a generated file. Do not edit directly!
-# To re-generate, run the following command from the top level directory:
-#
-#   mvn -N cq:update-quarkus-metadata
-#
----
-name: "Camel Jasypt"
-description: "Security using Jasypt"
-metadata:
-  icon-url: 
"https://raw.githubusercontent.com/apache/camel-website/main/antora-ui-camel/src/img/logo-d.svg";
-  unlisted: true
-  guide: 
"https://camel.apache.org/camel-quarkus/latest/reference/extensions/jasypt.html";
-  categories:
-  - "integration"
-  status:
-  - "preview"
+- route:
+    from:
+      uri: "direct:decryptConfigurationFromYaml"
+      steps:
+        - process:
+            ref: decryptConfig
diff --git a/integration-tests/jasypt/src/main/resources/secret.properties 
b/integration-tests/jasypt/src/main/resources/secret.properties
new file mode 100644
index 0000000000..336aadaae4
--- /dev/null
+++ b/integration-tests/jasypt/src/main/resources/secret.properties
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+# Translates to: Hello World From Other Config Source
+alternate.secret = 
ENC(lLspAla8A2Pn9bOJR1KPYPYRjiT0eynVuQNvvTeyoKydFoKd7cGxZNKxQ7ircVKw)
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmIT.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmIT.java
index 05917263ab..597c0b61af 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmIT.java
@@ -16,19 +16,8 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
+@QuarkusIntegrationTest
+class JasyptAlternateAlgorithmIT extends JasyptAlternateAlgorithmTest {
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmTest.java
similarity index 69%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmTest.java
index 05917263ab..d51d6bda29 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmTest.java
@@ -17,18 +17,22 @@
 package org.apache.camel.quarkus.component.jasypt.it;
 
 import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
 import io.restassured.RestAssured;
 import org.junit.jupiter.api.Test;
 
-@QuarkusTest
-class JasyptTest {
+import static org.hamcrest.Matchers.is;
 
+@QuarkusTest
+@TestProfile(JasyptAlternateAlgorithmTestProfile.class)
+class JasyptAlternateAlgorithmTest {
     @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
+    void alternateAlgorithmTest() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptConfiguration")
+                .get("/jasypt/decrypt/configuration/greeting.secret")
                 .then()
-                .statusCode(200);
+                .statusCode(200)
+                .body(is("Hello World"));
     }
-
 }
diff --git 
a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmTestProfile.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmTestProfile.java
new file mode 100644
index 0000000000..7bd0f22018
--- /dev/null
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateAlgorithmTestProfile.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import java.util.Map;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+public class JasyptAlternateAlgorithmTestProfile implements QuarkusTestProfile 
{
+    @Override
+    public Map<String, String> getConfigOverrides() {
+        String prngAlgorithm = AlgorithmUtils.getPRNGAlgorithm();
+        return Map.of(
+                "quarkus.camel.jasypt.algorithm", 
"PBEWithHMACSHA256AndAES_256",
+                "quarkus.camel.jasypt.random-iv-generator-algorithm", 
prngAlgorithm,
+                "quarkus.camel.jasypt.random-salt-generator-algorithm", 
prngAlgorithm,
+                "greeting.secret", 
"ENC(tp3QOxMouvD3oIdTXNM0uH+BtVEMCI1ak+GBTzPZOatthRP3m+ZxAg7CF0saNTmK)",
+                "explicit.config.provider.secret",
+                
"${camel-jasypt::ENC(tp3QOxMouvD3oIdTXNM0uH+BtVEMCI1ak+GBTzPZOatthRP3m+ZxAg7CF0saNTmK)}",
+                "camel.component.direct.timeout", "30000",
+                "timer.delay.secret", 
"ENC(/NsF9u8xrJh/sIre0ZQtOf6DwBaVVOcQkHe3ungkmvVfUyLXgboTgunz5Rpy+C6G)",
+                "timer.repeatCount.secret", 
"ENC(J1sLt6MpTuCTROefLY3MwQXcbPEDXnReFqvNdf/mBta4fs2HuO1Jkl8YbASg2oVt)");
+    }
+}
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileIT.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileIT.java
index 05917263ab..df8808a3e8 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileIT.java
@@ -16,19 +16,10 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+import org.junit.jupiter.api.Disabled;
 
+@Disabled("https://github.com/apache/camel-quarkus/issues/5665";)
+@QuarkusIntegrationTest
+class JasyptAlternateConfigProfileIT extends JasyptAlternateConfigProfileTest {
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileTest.java
similarity index 52%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileTest.java
index 05917263ab..538a19aa2b 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileTest.java
@@ -17,18 +17,30 @@
 package org.apache.camel.quarkus.component.jasypt.it;
 
 import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
 import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
-@QuarkusTest
-class JasyptTest {
+import static org.hamcrest.Matchers.is;
 
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
+@Disabled("https://github.com/apache/camel-quarkus/issues/5665";)
+@QuarkusTest
+@TestProfile(JasyptAlternateConfigProfileTestProfile.class)
+class JasyptAlternateConfigProfileTest {
+    @ParameterizedTest
+    @ValueSource(strings = {
+            "direct:decryptConfiguration",
+            "direct:decryptConfigurationFromXml",
+            "direct:decryptConfigurationFromYaml"
+    })
+    void alternateConfigurationProfile(String endpointURI) {
+        RestAssured.given()
+                .queryParam("endpointURI", endpointURI)
+                .get("/jasypt/decrypt/configuration/greeting.secret")
                 .then()
-                .statusCode(200);
+                .statusCode(200)
+                .body(is("Hello Custom Profile"));
     }
-
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileTestProfile.java
similarity index 76%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileTestProfile.java
index 05917263ab..66904852cc 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigProfileTestProfile.java
@@ -17,18 +17,12 @@
 package org.apache.camel.quarkus.component.jasypt.it;
 
 import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.QuarkusTestProfile;
 
 @QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+public class JasyptAlternateConfigProfileTestProfile implements 
QuarkusTestProfile {
+    @Override
+    public String getConfigProfile() {
+        return "custom-profile";
     }
-
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceIT.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceIT.java
index 05917263ab..8c572cd019 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceIT.java
@@ -16,19 +16,8 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
+@QuarkusIntegrationTest
+class JasyptAlternateConfigSourceIT extends JasyptAlternateConfigSourceTest {
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceTest.java
similarity index 67%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceTest.java
index 05917263ab..964ab3b9b4 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceTest.java
@@ -17,18 +17,22 @@
 package org.apache.camel.quarkus.component.jasypt.it;
 
 import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
 import io.restassured.RestAssured;
 import org.junit.jupiter.api.Test;
 
-@QuarkusTest
-class JasyptTest {
+import static org.hamcrest.Matchers.is;
 
+@QuarkusTest
+@TestProfile(JasyptAlternateConfigSourceTestProfile.class)
+class JasyptAlternateConfigSourceTest {
     @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
+    void alternateConfigSourceTest() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptConfiguration")
+                .get("/jasypt/decrypt/configuration/alternate.secret")
                 .then()
-                .statusCode(200);
+                .statusCode(200)
+                .body(is("Hello World From Other Config Source"));
     }
-
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceTestProfile.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceTestProfile.java
index 05917263ab..4d92f2a29c 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptAlternateConfigSourceTestProfile.java
@@ -16,19 +16,13 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import java.util.Map;
 
-@QuarkusTest
-class JasyptTest {
+import io.quarkus.test.junit.QuarkusTestProfile;
 
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+public class JasyptAlternateConfigSourceTestProfile implements 
QuarkusTestProfile {
+    @Override
+    public Map<String, String> getConfigOverrides() {
+        return Map.of("quarkus.config.locations", "secret.properties");
     }
-
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerIT.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerIT.java
index 05917263ab..2058f7d702 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerIT.java
@@ -16,19 +16,8 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
+@QuarkusIntegrationTest
+class JasyptConfigurationCustomizerIT extends 
JasyptConfigurationCustomizerTest {
 }
diff --git 
a/integration-tests-jvm/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptResource.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerTest.java
similarity index 51%
rename from 
integration-tests-jvm/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptResource.java
rename to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerTest.java
index c9e8e5db73..5c99c43ab6 100644
--- 
a/integration-tests-jvm/jasypt/src/main/java/org/apache/camel/quarkus/component/jasypt/it/JasyptResource.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerTest.java
@@ -16,32 +16,24 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.Response;
-import org.apache.camel.CamelContext;
-import org.jboss.logging.Logger;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
 
-@Path("/jasypt")
-@ApplicationScoped
-public class JasyptResource {
+import static org.hamcrest.Matchers.is;
 
-    private static final Logger LOG = Logger.getLogger(JasyptResource.class);
+@QuarkusTest
+@TestProfile(JasyptConfigurationCustomizerTestProfile.class)
+class JasyptConfigurationCustomizerTest {
 
-    private static final String OTHER_JASYPT = "jasypt";
-    @Inject
-    CamelContext context;
-
-    @Path("/load/other/jasypt")
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public Response loadOtherJasypt() throws Exception {
-        /* This is an autogenerated test */
-        /* No way to test a Camel artifact of kind "other" */
-        return Response.ok().build();
+    @Test
+    void customConfigurationFromConfigurationCustomizer() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptConfiguration")
+                .get("/jasypt/decrypt/configuration/greeting.secret")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
     }
 }
diff --git 
a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerTestProfile.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerTestProfile.java
new file mode 100644
index 0000000000..e25e1566d7
--- /dev/null
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptConfigurationCustomizerTestProfile.java
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import java.util.Map;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+public class JasyptConfigurationCustomizerTestProfile implements 
QuarkusTestProfile {
+    @Override
+    public Map<String, String> getConfigOverrides() {
+        return Map.of(
+                "quarkus.camel.jasypt.configuration-customizer-class-name", 
CustomJasyptConfigurationCustomizer.class.getName(),
+                "greeting.secret", 
"ENC(tp3QOxMouvD3oIdTXNM0uH+BtVEMCI1ak+GBTzPZOatthRP3m+ZxAg7CF0saNTmK)",
+                "explicit.config.provider.secret",
+                
"${camel-jasypt::ENC(tp3QOxMouvD3oIdTXNM0uH+BtVEMCI1ak+GBTzPZOatthRP3m+ZxAg7CF0saNTmK)}",
+                "timer.delay.secret", 
"ENC(/NsF9u8xrJh/sIre0ZQtOf6DwBaVVOcQkHe3ungkmvVfUyLXgboTgunz5Rpy+C6G)",
+                "timer.repeatCount.secret", 
"ENC(J1sLt6MpTuCTROefLY3MwQXcbPEDXnReFqvNdf/mBta4fs2HuO1Jkl8YbASg2oVt)");
+    }
+}
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptIT.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptIT.java
index 05917263ab..95dd6b7ee1 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+@QuarkusIntegrationTest
+class JasyptIT extends JasyptTest {
 
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationIT.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationIT.java
index 05917263ab..4a86354a56 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationIT.java
@@ -16,19 +16,8 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
-    }
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
+@QuarkusIntegrationTest
+class JasyptManualConfigurationIT extends JasyptManualConfigurationTest {
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationProfile.java
similarity index 71%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationProfile.java
index 05917263ab..521503ede3 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationProfile.java
@@ -16,19 +16,14 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import java.util.Map;
 
-@QuarkusTest
-class JasyptTest {
+import io.quarkus.test.junit.QuarkusTestProfile;
 
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+public class JasyptManualConfigurationProfile implements QuarkusTestProfile {
+    @Override
+    public Map<String, String> getConfigOverrides() {
+        return Map.of(
+                "quarkus.camel.jasypt.enabled", "false");
     }
-
 }
diff --git 
a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationTest.java
new file mode 100644
index 0000000000..dbded5e5df
--- /dev/null
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptManualConfigurationTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.startsWith;
+
+@QuarkusTest
+@TestProfile(JasyptManualConfigurationProfile.class)
+class JasyptManualConfigurationTest {
+
+    @Test
+    void manualJasyptConfiguration() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptManualConfiguration")
+                .get("/jasypt/decrypt/configuration/greeting.secret")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
+
+        RestAssured.given()
+                .queryParam("endpointURI", 
"direct:decryptManualConfigurationExpression")
+                
.get("/jasypt/decrypt/configuration/greeting.expression.secret")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World From Expression"));
+
+        // Verify it's the Camel properties component doing the decryption & 
not SmallRye Config
+        RestAssured.given()
+                .queryParam("endpointURI", 
"direct:decryptManualConfigurationExpression")
+                
.get("/jasypt/decrypt/configuration-from-provider/greeting.expression.secret")
+                .then()
+                .statusCode(200)
+                .body(startsWith("ENC("));
+    }
+}
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java
similarity index 61%
copy from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
copy to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java
index 05917263ab..1ec1da5a3e 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java
@@ -17,18 +17,30 @@
 package org.apache.camel.quarkus.component.jasypt.it;
 
 import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
 import io.restassured.RestAssured;
 import org.junit.jupiter.api.Test;
 
-@QuarkusTest
-class JasyptTest {
+import static org.hamcrest.Matchers.is;
 
+@QuarkusTest
+@TestProfile(JasyptSecureExtensionConfigTestProfile.class)
+class JasyptSecureExtensionConfigTest {
     @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
+    void secureDatabaseCredentials() throws InterruptedException {
+        RestAssured.given()
+                .get("/jasypt/secure/database")
                 .then()
-                .statusCode(200);
+                .statusCode(200)
+                .body(is("camel"));
     }
 
+    @Test
+    void secureDirectComponentTimeout() throws InterruptedException {
+        RestAssured.given()
+                .get("/jasypt/secure/direct/component")
+                .then()
+                .statusCode(200)
+                .body(is("60000"));
+    }
 }
diff --git 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java
similarity index 50%
rename from 
integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
rename to 
integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java
index 05917263ab..4d6d91bbae 100644
--- 
a/integration-tests-jvm/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java
@@ -16,19 +16,25 @@
  */
 package org.apache.camel.quarkus.component.jasypt.it;
 
+import java.util.Map;
+
 import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.QuarkusTestProfile;
 
 @QuarkusTest
-class JasyptTest {
-
-    @Test
-    public void loadOtherJasypt() {
-        /* A simple autogenerated test */
-        RestAssured.get("/jasypt/load/other/jasypt")
-                .then()
-                .statusCode(200);
+public class JasyptSecureExtensionConfigTestProfile implements 
QuarkusTestProfile {
+    @Override
+    public Map<String, String> getConfigOverrides() {
+        return Map.of(
+                "quarkus.datasource.devservices.enabled", "true",
+                // camel
+                "quarkus.datasource.devservices.username",
+                "ENC(ehEx3VxgoFVuReSFsgyUrw==)",
+                "quarkus.datasource.username", 
"${camel-jasypt::${quarkus.datasource.devservices.username}}",
+                // c4m31s3cr3t
+                "quarkus.datasource.devservices.password",
+                "ENC(ySRd4rq2bAuKEDe7wvcS37xERpu5+DgK)",
+                "quarkus.datasource.password", 
"${camel-jasypt::${quarkus.datasource.devservices.password}}",
+                "camel.component.direct.timeout", 
"ENC(FGlWjTf42zBT4vCRCztncA==)");
     }
-
 }
diff --git 
a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
new file mode 100644
index 0000000000..9ce1cead39
--- /dev/null
+++ 
b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ */
+package org.apache.camel.quarkus.component.jasypt.it;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.hamcrest.Matchers.is;
+
+@QuarkusTest
+class JasyptTest {
+    @ParameterizedTest
+    @ValueSource(strings = {
+            "direct:decryptConfiguration",
+            "direct:decryptConfigurationFromXml",
+            "direct:decryptConfigurationFromYaml"
+    })
+    void decryptSimpleConfigPropertyPlaceholder(String endpointURI) {
+        RestAssured.given()
+                .queryParam("endpointURI", endpointURI)
+                .get("/jasypt/decrypt/configuration/greeting.secret")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
+    }
+
+    @Test
+    void decryptSimpleConfigPropertyPlaceholderWithExpression() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptConfiguration")
+                
.get("/jasypt/decrypt/configuration/greeting.expression.secret")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World From Expression"));
+    }
+
+    @Test
+    void decryptSimpleConfigPropertyPlaceholderWithExplicitConfigProvider() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptConfiguration")
+                
.get("/jasypt/decrypt/configuration/explicit.config.provider.secret")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
+    }
+
+    @Test
+    void decryptInjectedConfigProperty() {
+        
RestAssured.get("/jasypt/decrypt/injected/configuration/direct:secretPropertyInjection")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
+    }
+
+    @Test
+    void decryptInjectedConfigPropertyWithExplicitConfigProvider() {
+        
RestAssured.get("/jasypt/decrypt/injected/configuration/direct:secretExplicitConfigProviderPropertyInjection")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
+    }
+
+    @Test
+    void timerConfiguredWithEncryptedPropertiesFired() {
+        RestAssured.given()
+                .queryParam("expectedMessageCount", 2)
+                .get("/jasypt/timer/mock/results")
+                .then()
+                .statusCode(204);
+    }
+
+    @Test
+    void resolveInsecureProperty() {
+        RestAssured.given()
+                .queryParam("endpointURI", "direct:decryptConfiguration")
+                .get("/jasypt/decrypt/configuration/insecure.property")
+                .then()
+                .statusCode(200)
+                .body(is("Hello World"));
+    }
+}
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 8a64dcb437..2072658b5a 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -116,6 +116,7 @@
         <module>influxdb</module>
         <module>jackson-avro</module>
         <module>jackson-protobuf</module>
+        <module>jasypt</module>
         <module>java-joor-dsl</module>
         <module>jaxb</module>
         <module>jcache</module>
diff --git a/tooling/scripts/test-categories.yaml 
b/tooling/scripts/test-categories.yaml
index 0d7a21f32a..ed63d22c23 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -211,6 +211,7 @@ group-13:
   - github
   - google
   - groovy-dsl
+  - jasypt
   - jira
   - java-joor-dsl
   - js-dsl


Reply via email to