SpringBoot整合Druid,密码加密
1.application.yml配置
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/jby?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false username: root # 密文 password: 'f687101570bae7ce4d313c2b4440f4ae' initialSize: 100 minIdle: 100 maxActive: 200 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 'x' FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 filters: config,stat
2. 构建UmspscDataSource类,继承DruidDataSource类
@Slf4j public class UmspscDataSource extends DruidDataSource { 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, initMethod = "init") @Primary @ConfigurationProperties(ignoreUnknownFields = false,prefix="spring.datasource") public DruidDataSource dataSource() { DruidDataSource 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); } }