我正在使用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中。
答案 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>