【问题标题】:encrypt value in properties file加密属性文件中的值
【发布时间】:2015-08-20 16:32:14
【问题描述】:

我在属性文件中有一个密码,我想使用任何 2 路加密进行加密。

password = 123456

我在 spring-security xml 中使用它来进行活动目录身份验证。那个时候密码应该被解密。有人能指出我该怎么做吗?

我是春天的新手,我不太确定该走哪条路。我使用了 Jasypt,但我收到 LDAP 身份验证错误 52,这意味着密码不正确。我认为解密没有正确进行。

我正在使用弹簧 4。

【问题讨论】:

标签: java spring authentication encryption


【解决方案1】:

看看here。主要步骤是:

  1. 在你的 spring 上下文 xml 文件中定义命名空间:

    xmlns:encryption="http://www.jasypt.org/schema/encryption"

  2. 定义一个加密器:

    <encryption:strong-password-encryptor id="passwordEncryptor" />

  3. 而不是你的 context:property-placeholder 标签,使用:

    <encryption:encryptable-property-placeholder encryptor="passwordEncryptor" location="classpath:application.properties"/>

  4. 现在,您可以使用如下加密的属性,可加密属性占位符将确保它们被解密。请注意,您需要使用与使用定义的编码器相同的算法(和相同的配置)来加密属性(密码)。

    password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)

【讨论】:

  • 这是一个有效的命名空间 xmlns:encryption="jasypt.org/schema/encryption" 吗?
  • 是的。请参阅上面提到的the link。另外,请记住,您需要将 jasypt-spring31 工件添加到类路径中。不幸的是,Jasypt 似乎不支持 Spring 4+
  • 我想我浪费了足够多的时间来尝试 jasypt 的事情。走传统方式。编写一个 bean 来解密密码并将其注入任何需要密码的地方
  • 这绝对是一个选择。然后你可以简单地注入这样的密码: value="#{@passwordManager.decode('${my.encoded.password}')}"
  • 谢谢米洛斯。最后一条评论对我很有帮助!
【解决方案2】:

我的问题的答案。将近一天后,我无法让它与 Jasypt 一起工作。所以我写了一个简单的AES加密/解密。(谷歌上的大量示例)

接下来在 springsecurity.xml 中我只是像这样添加了对 AES 类的引用

<beans:bean id="Decrypt" class="com.xxx.encoder.Decrypt">
    </beans:bean>

接下来像这样注入密码

<beans:bean id="contextSource"
class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <beans:constructor-arg value="${host}" />
        <beans:property name="base" value="" />
        <beans:property name="userDn" value="${userDN}" />
        **<beans:property name="password" value="#{Decrypt.decrypt('${password}')}" />**

在我的属性文件中传递了加密密码并且它起作用了。

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 2011-04-15
    • 2015-09-30
    • 2015-09-10
    • 2015-12-29
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多