Jasypt和Weblogic环境变量

时间:2016-08-23 17:05:12

标签: spring weblogic jasypt

我正在使用jasypt 1.9.2加密我的Spring REST服务的属性文件中的密码。我已经通过名为APP_ENCRYTPION_PASSWORD的服务器启动参数文本框向Weblogic添加了一个环境变量,但该环境变量未被jasypt读取。这是错误:

ERROR o.s.web.servlet.DispatcherServlet - Context initialization failed
java.lang.NullPointerException: null
    at org .jasypt.encryption.pbe.config.SimplePBEConfig.getPasswordCharArray(SimplePBEConfig.java:434) ~[jasypt-1.9.2.jar:na]

以下是服务器启动期间记录的Weblogic环境变量:

JAVA_OPTIONS= -Dother.vars=xxx -DAPP_ENCRYPTION_PASSWORD=password -Dmore.vars=yyy

我已经跟踪了jasypt代码,似乎jasypt没有解析JAVA_OPTIONS中的环境变量。我知道这适用于其他框架,如spring,因为我们在JAVA_OPTIONS中有其他环境变量,春天没有问题阅读。

我可以将环境变量添加到weblogic的启动脚本(我认为是setEnv.sh),但是这将为所有受管节点添加变量,而不是我的应用程序部署到的一个集群。

有没有不同的方法在spring中配置jasypt以获取JAVA_OPTIONS中的环境变量?

这是我的春季配置:

<bean
    class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
    <constructor-arg>
        <bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
            <property name="config">
                <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
                    <property name="algorithm" value="PBEWithMD5AndTripleDES" />
                    <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
                </bean>
            </property>
        </bean>
    </constructor-arg>
    <property name="location">
        <value>application.properties
        </value>
    </property>
</bean>

我的application.properties文件内容:

username=someuser
password=ENC(encryptedstring)

为清晰起见更新: 通过setEnv.sh或Eclipse将环境变量添加到weblogic就可以了。只有当我使用weblogic控制台为jasypt无法解析值的集群添加环境变量时,因为它在JAVA_OPTIONS中。

1 个答案:

答案 0 :(得分:0)

您可以使用 passwordSysPropertyName 代替 passwordEnvName。这样你就可以使用 -DpasswordSysPropertyName="mysecret"

<bean id="environmentVariablesConfiguration"
    class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    <property name="algorithm" value="PBEWithMD5AndDES" />
    <property name="passwordSysPropertyName" value="APP_ENCRYPTION_PASSWORD" />
</bean>