在骆驼语境之外使用JASYPT

时间:2014-07-18 12:28:49

标签: apache-camel activemq apache-servicemix jasypt

我正在尝试使用JASYPT在camel上下文中的camel蓝图中解密属性,如下所示。 是不可能在camel context之外使用JASYPT + Property Component?

我正在使用servciemix 5.0.0

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
       xsi:schemaLocation="
       http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

  <cm:property-placeholder id="prop" persistent-id="mypersistent">
  <!-- list some properties for this test -->
  <cm:default-properties>
      <cm:property name="cool.result" value="ENC(jU1ypXF709gpmOsJ2nKGgTbtd3oAs0n3rUNxEmMp2G8=)"/>
      <cm:property name="jms.password" value="ENC(QhKlLI3eMKUhsUSPEWIRFw==)"/>
  </cm:default-properties>
  </cm:property-placeholder>
  <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
    <property name="location" value="blueprint:prop"/>
    <property name="propertiesParser" ref="jasypt"></property>
</bean>
<!-- define the jasypt properties parser with the given password to be used -->
<bean id="jasypt" class="org.apache.camel.component.jasypt.JasyptPropertiesParser">
    <property name="password" value="secret"/>
</bean>
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://127.0.0.1:61616" />
            <property name="userName" value="smx"/>
            <property name="password" value="${jms.password}"/>
        </bean>
    </property>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
  <!-- define the camel properties placeholder, and let it leverage jasypt -->
  <!--<propertyPlaceholder id="properties"
                       location="blueprint:prop"
                       propertiesParserRef="jasypt"/>-->
    <route>
        <from uri="file://inputfolder"/>
        <log message="jms password {{jms.password}}"/>
        <setBody><constant>Foo message</constant></setBody>
        <to uri="jms:queue:default.inputchannel?jmsMessageType=Text&amp;transferExchange=true"/>
        <to uri="{{cool.result}}"/>
    </route>
</camelContext>

它给了我以下错误

ava.lang.SecurityException:用户名[smx]或密码无效。     在org.apache.activemq.security.JaasAuthenticationBroker.addConnection(JaasAuthenticationBroker.java:80)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:97)[84:org.apache.activemq.activemq-osgi:5.9.0]     at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:733)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.broker.TransportConnection $ 1.onCommand(TransportConnection.java:149)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:270)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)[84:org.apache.activemq.activemq-osgi:5.9.0]     在org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)[84:org.apache.activemq.activemq-osgi:5.9.0]     在java.lang.Thread.run(Thread.java:745)[:1.7.0_60]

1 个答案:

答案 0 :(得分:1)

您无法在Apache Camel或org.apache.camel.component.jasypt.JasyptPropertiesParser之外使用<camelContext>

对于<bean>,然后是负责设置属性的blueprint propertyplaceholder。所以你需要一些方法将jasypt挂钩到osgi blueprint属性占位符,例如这个东西

<cm:property-placeholder id="prop" persistent-id="mypersistent">