You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Willem Jiang (JIRA)" <ji...@apache.org> on 2015/04/09 15:34:12 UTC

[jira] [Commented] (CAMEL-7849) Encrypted properties inside and outside

    [ https://issues.apache.org/jira/browse/CAMEL-7849?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14487347#comment-14487347 ] 

Willem Jiang commented on CAMEL-7849:
-------------------------------------

After writing a simple test case, I found I made a mistake that BridgePropertyPlaceholderConfigurer doesn't know anything about the palceholder outside of the camel context. It turns out the BridgePropertyPlaceholderConfigurer doesn't override the method of String resolvePlaceholder(String placeholder, Properties props) to apply the parser setting of the BridgePropertyPlaceholderConfigurer. 

I will commit a quick fix of it shortly.


> Encrypted properties inside and outside <camelContext>
> ------------------------------------------------------
>
>                 Key: CAMEL-7849
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7849
>             Project: Camel
>          Issue Type: Bug
>    Affects Versions: 2.13.2, 2.14.0
>            Reporter: Camel Guy
>            Assignee: Willem Jiang
>            Priority: Minor
>             Fix For: 2.14.3, 2.15.2, 2.16.0
>
>
> {noformat}
> 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>.
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)