Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-7849

Decrypting properties via Jasypt outside of <camelContext>

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.13.2, 2.14.0
    • Fix Version/s: 2.14.3, 2.15.2, 2.16.0
    • Component/s: None
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      File default.properties contains an entry like: key=ENC(..)
      
      The following Camel Spring DSL snippet decrypts the 
      property value inside <camelContext> via {{key}} but does 
      not decrypt it outside of the <camelContext> via ${key}:
      
      <bean id="jasypt" class="org.apache.camel.component.jasypt.JasyptPropertiesParser">
          <property name="password" value="sysenv:PROPERTIES_KEY"/>
      </bean>
      
      <bean id="bridgePropertyPlaceholder" class=
        "org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
        <property name="locations" >
        <list>
          <value>classpath:default.properties</value>
        </list></property>
        <property name='parser' ref='jasypt'/>
      </bean>
      
      In order to get ${} to decrypt, first I remove all of the above. 
      Then I add jasypt dependencies to pom.xml:
      
      <dependency>
        <groupId>org.jasypt</groupId>
        <artifactId>jasypt</artifactId>
        <classifier>lite</classifier>
        <version>1.9.2</version>
      </dependency>
      
       <dependency>
        <groupId>org.jasypt</groupId>
        <artifactId>jasypt-spring3</artifactId>
        <version>1.9.2</version>
       </dependency> 
      
      And add the following to Camel Spring DSL:
      
      <bean id="environmentVariablesConfiguration"
           class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
         <property name="algorithm" value="PBEWithMD5AndDES" />
         <property name="passwordEnvName" value="PROPERTIES_KEY" />
       </bean>
       <bean id="configurationEncryptor"
           class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
         <property name="config" ref="environmentVariablesConfiguration" />
      </bean>
      <bean id="propertyConfigurer" class=
        'org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer'>
       <constructor-arg ref="configurationEncryptor"/>
         <property name="locations" >
        <list>
          <value>classpath:default.properties</value>
        </list></property>
      </bean>
      <bean id="jasypt" class=
        "org.apache.camel.component.jasypt.JasyptPropertiesParser">
          <property name="password" value="sysenv:PROPERTIES_KEY"/>
      </bean>
      
      <!-- And inside the camelContext... -->
      
      <camelContext xmlns="http://camel.apache.org/schema/spring">
      
      <propertyPlaceholder id="properties"
       propertiesParserRef="jasypt" 
       location="classpath:default.properties"/> 
      
      This is the only solution that I could discover. Using BridgePropertyPlaceholder 
      didn't work. <propertyPlaceholder> must be used inside <camelContext>.
      

        Attachments

          Activity

            People

            • Assignee:
              njiang Willem Jiang
              Reporter:
              camelguy Camel Guy
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: