我使用Spring JPA访问我的数据库,但数据库的用户名和密码以两个文件的形式提供给我(username.txt和password.txt)。安全准则是我们不应该在配置文件中粘贴密码或任何形式的密码(加密)。
我在想办法做这样的事情:
spring.datasource:
url: <db url>
username: "file:/path/username.txt"
password: "file:/path/password.txt"
字符串
有没有人知道如何实现类似的东西?
PS.我想在这个spring properties文件中保留特定于环境的凭据文件路径。有几种方法可以将文件内容作为环境变量java -Dusername=${cat /path/username}传入,但我想避免将我的配置放在spring properties文件之外。
编辑:用户名和密码以明文形式存储在单独的文件中。
5条答案
按热度按时间20jt8wwn1#
Sping Boot 2.4引入了从文件中读取配置值的功能,其中目录和文件的名称是属性名称,文件内容是属性值。
字符串
application.yaml
文件包含型
那么环境将包含名为
spring.datasource.username
和spring.datasource.password
的属性。lzfw57am2#
你不能从Spring application properties文件中读取文件的内容。但是你可以通过编程方式配置数据源,并在代码中读取文件。
字符串
请参阅this文章了解详细信息。我假设你知道如何使用Sping Boot 读取文件,如果不知道,你可以参阅this文章。
8xiog9wr3#
当我们搜索“Spring启动秘密”时,仍然首先弹出这篇(2016)文章:
Spring Vault!
一些使用docker-secrets的现代方法(在这里):
但“务实地”和“最新的rce的${;}",我会提出这样的建议:
字符串
感谢:
bkkx9g8r4#
有多种方法可以加载另一个包含机密的配置文件(请参阅documentation)
一个想法是创建一个特定于环境的应用程序.yaml(例如,
application-prod.yaml
只包含应用程序配置旁边的prod配置(您不需要将其打包到jar中,您可以仅在生产环境中将其放在jar旁边)。另一个想法是使用
-Dspring.config.additional-location=...
加载额外的配置jqjz2hbq5#
虽然我不能说,这是一个好主意,但你可以读取文件内容的领域。但你必须做3个步骤
1.将文件路径添加到application.properties
第一个月
例如
字符串
1.将SpEL表达式添加到字段,该表达式使用属性中的参数调用此方法
型
在启动时,Spring将调用此方法并将结果放入password字段。
类可能看起来像
型