起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7808|回复: 4

[分享] BeX5数据源使用密文配置的办法

[复制链接]

8

主题

34

帖子

154

积分

初级会员

Rank: 2

积分
154
QQ
发表于 2021-7-14 21:45:00 | 显示全部楼层 |阅读模式
版本: 其它(帖子中说明) 小版本号:
数据库: Oracle 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
近期网络安全需求中提到,系统的配置文件不允许明文配置。BeX5采用Tomcat作为容器,数据源配置及管理均托管于Tomcat。论坛上逛了一圈,没找到想要的方案,估计justep并未做额外的封装处理。因此本帖实质上是对Tomcat数据源加密配置的分享,度娘上零零散散有一些资料,总结如下,供需要的朋友参考。
目标:apache-tomcat/conf/context.xml中resource数据源的password做密文配置,且系统能正常运行。
  <Resource name="erp" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@xx.xx.xx.xx:ORCL" username="erp" password="密文" maxActive="10" maxIdle="5"/>

分析:tomcat数据源管理默认采用lib/tomcat-dbcp.jar中的BasicDataSourceFactory作为工厂,该工厂直接获取context.xml中的数据,并封装成数据源。因此想要植入"密文还原"的逻辑,就要从工厂处下手。

方案一:
直接下载tomcat对应版本的源码,找到BasicDataSourceFactory.java并修改如下关键代码:
    value = properties.getProperty("password");
    if (value != null) {
      dataSource.setPassword(value);   --  此处value为密文,则在此对应解密即可  
    }

此法简单粗暴,是度娘上最常见的处理方式。缺点是不易维护,遇到tomcat版本升级,需要重新编译并覆盖,比较繁琐。

方案二:
context.xml的Resource节点支持扩展factory属性,可指定自定义工厂,处理配置信息:
  <Resource name="erp" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@xx.xx.xx.xx:ORCL" username="erp" password="密文" maxActive="10" maxIdle="5"   factory="com.abc.custom.EncryptDataSourceFactory"/>
EncryptDataSourceFactory.java需继承自BasicDataSourceFactory,并覆写getObjectInstance方法,该方法接收整个Resource对象,获取其password属性,解密后,回写入Resource对象中,完成逻辑植入。
此法直观优雅,配置文件一眼可见处理思路。瑕疵是仍需要以独立的jar存放于tomcat/lib中,不利于团队代码管理。

个人更推荐方案二。
以上。


1014

主题

4371

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10979
QQ
发表于 2021-7-16 11:31:30 | 显示全部楼层
很棒,
还可以试试druid数据库连接池的加密方案
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

1014

主题

4371

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10979
QQ
发表于 2021-7-16 11:40:13 | 显示全部楼层
本帖最后由 ecoolper 于 2021-7-16 11:43 编辑

看下这个帖子:
https://my.oschina.net/ecoolper/blog/664047
https://github.com/alibaba/druid ... 7%94%A8ConfigFilter

孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

8

主题

34

帖子

154

积分

初级会员

Rank: 2

积分
154
QQ
 楼主| 发表于 2021-7-16 18:07:11 | 显示全部楼层
ecoolper 发表于 2021-7-16 11:40
看下这个帖子:
https://my.oschina.net/ecoolper/blog/664047
https://github.com/alibaba/druid/wiki/%E4 ...

嗯,原理同方案2,高配版。因bex5自己实现的classloader,不知道集成druid这种3rd框架有没有坑。所以自己实现是最简单快捷的。主要加解密的功能并没有多复杂。
谢谢分享
回复 支持 反对

使用道具 举报

33

主题

373

帖子

916

积分

高级会员

Rank: 4

积分
916
QQ
发表于 2022-12-29 23:22:14 | 显示全部楼层
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 08:13 , Processed in 0.064246 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表