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

Decrypting properties via Jasypt outside of <camelContext>

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.13.2, 2.14.0
    • 2.14.3, 2.15.2, 2.16.0
    • None
    • None
    • 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

            njiang Willem Jiang
            camelguy Camel Guy
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: