【问题标题】:Jasypt and Weblogic environment variablesJasypt 和 Weblogic 环境变量
【发布时间】:2016-12-30 15:02:08
【问题描述】:

我正在使用 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 中的环境变量?

这是我的弹簧配置:

<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 内。

【问题讨论】:

  • 这是一个老问题,答案是:stackoverflow.com/questions/15340892/… 该答案中有博客:chrislovecnm.com/2011/06/16/…
  • 我在发布之前找到了这个答案,它并没有解决我的问题。我的问题是关于 weblogic 中的环境变量以及 jasypt 库如何解析这些值。
  • 您是否通过启动脚本启动托管服务器?这就是为什么您需要在 JAVA_OPTIONS 变量中添加这些参数的原因?如果是这样,那么您可以使用您的 jasypt 值创建自己的启动脚本,并调用 WLS 脚本。如果您使用的是节点管理器,那么您可以通过管理控制台添加这些值
  • 不幸的是,我不确定我们的 weblogic 集群是如何设置的。我只是一个开发者,不是管理员。管理员告诉我通过控制台在参数文本框中的 Home >Summary of Deployments >Summary of Environment >Summary of Servers >Server01 位置下将环境变量添加到我们的开发环境中。这会将 env var 添加到 JAVA_OPTIONS 变量中,而不是作为它自己的变量。

标签: spring weblogic jasypt


【解决方案1】:

您可以使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2019-08-21
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多