Springboot整合Hikari数据库连接池,密码加密
2024-09-04 14:41:10
1.application.yml配置
spring:
datasource:
jdbcUrl: jdbc:mysql://127.0.0.1:3306/jby?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: 'f687101570bae7ce4d313c2b4440f4ae'
#自动提交
auto-commit: true
#最小连接
minimum-idle: 100
#最大连接
maximum-pool-size: 200
#最大空闲时间
idle-timeout: 60000
#连接池名
pool-name: DatebookHikariCP
#最大生命周期
max-lifetime: 900000
#连接超时时间
connection-timeout: 15000
#心跳检测
connection-test-query: SELECT 'x' FROM DUAL
2. 构建UmspscDataSource类,继承HikariDataSource类
@Slf4j
public class UmspscDataSource extends HikariDataSource {
private String passwordDis;
/**
* 密匙
*/
private final static String PKEY ="1234565437892132";
@Override
public String getPassword(){ if(StringUtils.isNotBlank(passwordDis)){return passwordDis;}
String encPassword = super.getPassword();
if(null==encPassword){
return null;
}
log.info("数据库密码加解密,{"+encPassword+"}");
try{
// 密文解密,解密方法可以修改
String key = HexUtil.encodeHexStr(PKEY);
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes());
passwordDis = aes.decryptStr(encPassword, CharsetUtil.CHARSET_UTF_8);
return passwordDis;
}catch (Exception e){
log.error("数据库密码解密出错,{"+encPassword+"}");
log.error(LogUtil.e(e));
throw new AppException("数据库密码解密失败!", e);
}
}
}
3.初始化DataSource类
@Component
public class CommonBeanFactory { @Bean(name = "dataSource", autowire = Autowire.NO)
@Primary
@ConfigurationProperties(ignoreUnknownFields = false,prefix="spring.datasource")
public HikariDataSource dataSource() {
HikariDataSource druidDataSource = new UmspscDataSource();
return druidDataSource;
}
}
*******************************
构建密文
@Slf4j
public class Main { public static void main(String[] args) {
//明文
String content = "123456";
//密匙
String pkey = "1234565437892132";
log.info("密匙:" + pkey);
String key = HexUtil.encodeHexStr(pkey);
//构建
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); //加密为16进制表示
String encryptHex = aes.encryptHex(content);
log.info("密文:" + encryptHex);
//解密为字符串
String decryptStr = aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
log.info("明文:" + decryptStr);
}
}
最新文章
- visio二次开发——图纸解析之形状
- extjs之apply
- JAVA本地方法详解,什么是JAVA本地方法?
- htseq-count 的使用
- ubuntu 查看端口被占用并处理
- nginx 配置https 负载均衡
- CAN总线基础知识(二)
- 设计模式NO.3
- [矩形并-扫描线-线段树]Picture
- 在centos7 上安装Python3
- 也谈如何获取真实正确的 Windows 系统版本号
- Nginx 测试环境配置,留作笔记使用
- Reactnative——安装React Navigation后无法运行项目
- python + seleinum +phantomjs 设置headers和proxy代理
- Linux下的二进制兼容性的检测
- docker machine介绍和使用
- Rspec: everyday-rspec实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章
- 脱离SVN的控制
- console在ie下不兼容的问题(console在ie9下阻碍页面的加载,打开页面一片空白)
- Linux防火墙简介 – iptables配置策略