我正在使用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中有其他环境变量,spring没有读取问题。
我可以将环境变量添加到weblogic的启动脚本(我认为是setEnv.sh)中,但这将为所有托管节点添加变量,而不是为我的应用程序部署到的集群添加变量。
有没有不同的方式在spring中配置jasypt来获取JAVA_OPTIONS中的环境变量?
下面是我的spring配置:
<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中。
发布于 2021-06-24 20:47:33
您可以使用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>https://stackoverflow.com/questions/39107004
复制相似问题