【问题标题】:Spring Boot Externalized Configuration with Jasypt encryption(Bootstrap issue)使用 Jasypt 加密的 Spring Boot 外部化配置(引导问题)
【发布时间】:2019-03-09 12:55:49
【问题描述】:

在我的 Spring boot 应用程序中,当我尝试使用 uri 模式和 Jasypt 加密密码连接到 MongoDB 时,我遇到了 Auth 异常。在调试时,我确实看到使用 URI 时没有发生 Jasypt 解密,而使用单独的 mongo 配置(见下文)连接成功。在日志中,加密的字符串ENC(Qev1vJ3DummyPSUApeQfgdgfd==) 被打印出来,没有解密。整个配置通过命令行使用SPRING_APPLICATION_JSON

使用uri:(不工作)

java -Dspring.application.json="{below json}" -jar myapp.jar

{
    "spring": {
        "data": {
            "mongodb": {
                "uri": "mongodb://myusername:${spring.data.mongodb.password}@localhost:27017/mydb",
                "password": "${mongodb.password}"
            }
        }
    },
    "jasypt": {
        "encryptor": {
            "password": "myjasypt-password"
        }
    },
    "mongodb": {
        "password": "ENC(Qev1vJ3DummyPSUApeQfgdgfd==)"
    }
}

With Individual property setting:(工作正常)

java -Dspring.application.json="{below json}" -jar myapp.jar

{
    "spring": {
        "data": {
            "mongodb": {
                "host": "localhost",
                "port": "27017",
                "database": "mydb",
                "username": "myusername",
                "password": "${mongodb.password}"
            }
        }
    },
    "jasypt": {
        "encryptor": {
            "password": "myjasypt-password"
        }
    },
    "mongodb": {
        "password": "ENC(Qev1vJ3DummyPSUApeQfgdgfd==)"
    }
}

Spring Boot:1.5.2.RELEASE | MongoDB:3.4.2 |贾西普特:1.14

例外:

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName=myusername, source=mydb, password=<hidden>, mechanismProperties={}}

在 uri 中使用 Jasypt 时似乎没有进行解密。我不确定这是否与配置的引导有关。任何指针都会有所帮助。

【问题讨论】:

  • 不知道你是否编辑了URI示例,但jasypt属性前有两个逗号,表示该示例是格式错误的json
  • 更正了我在问题中的错字。单独复制和粘贴导致错字。

标签: spring-boot jasypt


【解决方案1】:

我建议直接指定加密属性,像这样

{
    "spring": {
        "data": {
            "mongodb": {
                "uri": "mongodb://myusername:${mongodb.password}@localhost:27017/mydb"
            }
        }
    },
    "jasypt": {
        "encryptor": {
            "password": "myjasypt-password"
        }
    },
    "mongodb": {
        "password": "ENC(Qev1vJ3DummyPSUApeQfgdgfd==)"
    }
}

在我的书中,这两个例子是等效的

【讨论】:

    【解决方案2】:

    找到了答案。这个问题似乎在 Jasypt 1.14 中存在,并在 1.17 及更高版本中得到了修复。

    如果无法更改 1.14 版本,请在 resources/META-INF/spring.factories

    中添加以下条目
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ulisesbocchio.jasyptspringboot.JasyptSpringBootAutoConfiguration
    

    在 1.17 版本中,Jasypt 的 EnableEncryptablePropertiesConfiguration 使用 Applicationcontextinitializer 自定义 Environment

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-17
      • 2021-12-02
      • 2021-01-05
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多