springboot 项目可以动态获取数据库配置吗?

2023-02-23 10:07:15 +08:00
 godleon

需求

例 springboot 项目,里面会有 mysql 配置如下:

 spring:
  datasource:
    #数据源基本配置
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:9999/database_v2
    

想问问怎么能把这个配置在上线的时候隐藏掉?或者动态获取、自己能控制最好

5297 次点击
所在节点    程序员
50 条回复
nilai
2023-02-23 15:46:52 +08:00
感觉这应该项目应该就是楼主需要把控制权牢牢的把控在自己手中, 应用程序放出去, 但是数据库掌握在自己手中,
像你之前楼层说的,通过 http 接口返回数据库连接信息,部署完成后把 http 接口关闭。类似的方法很多, 比如把数据库信息隐藏到某个微博中, 或者配合上 aes 、rsa 之类的加解密会更好, 不过你说通过 jvm 参数的话不太靠谱, 你家执行一下 history 命令, 你的数据库信息就暴露出来了
ZX16815
2023-02-23 16:27:14 +08:00
方案 1 、暴露一个可以修改项目中 datasource 对象的接口,项目启动后,用调接口的形式更新数据。接口参数注意加解密
方案 2 、用 jasypt 对 yaml 中的数据源基本配置进行加密,注意隐藏好密钥
kingofzihua
2023-02-23 16:42:27 +08:00
spring git config ?
YuanCome
2023-02-23 16:52:31 +08:00
简单操作,本地配置文件然后加密,最后代码解密读取文件就是了
datoujiejie221
2023-02-23 18:00:10 +08:00
加密做的再好,程序还是在别人手中运行,可以通过反编译抓包等方式拿到信息,不如数据库做好权限控制。
zhaoyta
2023-02-23 19:04:53 +08:00
jmx 了解下
mamumu
2023-02-23 21:50:09 +08:00
打包时加进去,或者 jvm 参数启动
Avn
2023-02-23 22:12:26 +08:00
同意 45 楼的观点。即使通过各种方式隐藏了数据库配置,只要 Spring Boot 应用运行在别人的服务器上,别人还是可以通过 Arthas 等方式,读取到正在运行中的 Spring Boot 应用的很多信息。

例如,通过以下 Arthas 命令即可获取到连接池 Bean:
tt -i 1000 -w 'target.getApplicationContext().getBean("dataSource")'
S1ngleton
2023-02-24 03:10:18 +08:00
推一个自己之前写的配置中心,是基于 kafka 的订阅推送配置:github.com/Leisurelybear/konfig
可以 docker 部署试用下看看
另外还有 java sdk:github Leisurelybear/konfig-sdk-java
echo1937
2023-03-13 09:08:08 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/918435

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX