【使用druid连接池对配置文件密码进行加密 】

① maven依赖jar包

注意: druid 上面的依赖,我之前用1.0.10版本时,在powershell 执行命令的时候 会出现???乱码问题, 后更换为1.0.25时问题解决,原因尚不清楚

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.25</version>
</dependency>


<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

② 检查jar包是否引入到工程中,并打开jar包目录

在这里插入图片描述

③ 点击jar包 --> 右键 show in Expolere 打开找到本地磁盘目录

在这里插入图片描述

④ 如果是win10 点击右键打开powershell 命令窗口. 我是win7系统 只能在该路径上手动输入powershell 命令 按下enter 回车键

在这里插入图片描述

⑤ 打开命令窗口后 我们执行 命令进行密码加密-加密后privatekey 为私钥, publicKey 公钥 ,password 为你的加密后密码.

注意你jar包的版本号,一定要和命令一致
java -cp druid-1.0.25.jar com.alibaba.druid.filter.config.ConfigTools XXX(你的密码)

在这里插入图片描述

⑥ 将密码和公钥复制出来,放到我们spring boot 项目配置文件中

* 
注意 公钥我们从安全角度来讲应该放到其它地方而不是放在配置文件里,
* 
比如放到服务器上的某个位置
* 

生产环境中我们可以设置在启动命令上 java -jar xxx.jar --spring.datasource.druid.publickey=你的公钥
*
测试环境中我们可以 在idea启动参数里

在这里插入图片描述

配置文件参数

server:
  port: 8090
  tomcat:
    accesslog:
      check-exists: true
spring:
  datasource:
      url: jdbc:mysql://127.0.0.1:3306/loterry?useUnicode=true&characterEncoding=utf8
      username: root
    # 加密后的密文
      password: RypyclrY2P+O5KpPtcYe7L7OT3Idl/seT6H7OfRhWZ/vTp41Y3a/yeFFBBHOrTky5sCqrF1UAPLR0t/REsr1Bg==
      driver-class-name: com.mysql.jdbc.Driver
      druid:
        # 公钥
        publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJkgiwKX0f+OXdbAwXytqkLTaycyw/iKycCdQgvUQ30ddJ6bZcBbjcpND0ovvlxf9KsV5AUSOEIcZFpWKQsYwn8CAwEAAQ==
        #设置为true 读取改公钥
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;config.decrypt=true;config.decrypt.key=${spring.datasource.druid.publickey};
        filter:
          config:
            enabled: true
 

⑦ 配置好后我们从启项目尝试连接一下数据库-OK没有问题

在这里插入图片描述

如果上面配置不生效,自定义配置DruidDataSource 配置文件,进行加密解密

⑧ 我们可以自定义配置DruidDatasource 读取配置文件,也可以从写他的方法, * 这里我使用的是在applation启动类中通过@Bean注解的形式进行注入

package com.example.demo;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
@ImportResource(locations = "classpath*:/META-INF/spring*.xml")
@EnableScheduling
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Autowired
    private Environment env;

    //destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用.
    @Bean(destroyMethod = "close")
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        String publicKey = env.getProperty("spring.datasource.druid.public-key");
        String pwd = env.getProperty("spring.datasource.password");
        if (publicKey != null){
            try {
                dataSource.setPassword(ConfigTools.decrypt(publicKey,pwd));//密码
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名
        dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        dataSource.setInitialSize(2);//初始化时建立物理连接的个数
        dataSource.setMaxActive(20);//最大连接池数量
        dataSource.setMinIdle(0);//最小连接池数量
        dataSource.setMaxWait(60000);//获取连接时最大等待时间,单位毫秒。
        dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql
        dataSource.setTestOnBorrow(false);//申请连接时执行validationQuery检测连接是否有效
        dataSource.setTestWhileIdle(true);//建议配置为true,不影响性能,并且保证安全性。
        dataSource.setPoolPreparedStatements(false);//是否缓存preparedStatement,也就是PSCache
        return dataSource;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值