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

Camel Guy commented on CAMEL-7849:
----------------------------------

The Camel documentation for Jasypt reads like the examples work for both ${} 
and {}. It took me about 24 solid working hours to figure this out. This could 
just be a documentation problem. However, the downside is the additional 
CPU/memory overhead caused by loading the same .properties files multiple 
times. In my code, I load two properties files. Not a huge problem. The real 
problem is that this isn't as easy as it should be.

My real use case involves restlet realms. I want to encrypt user passwords. I 
also want to encrypt JDBC passwords. Therefore, I very much need ${} to work.

> 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
>
> {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)

Reply via email to