springboot 动态加密数据源url、用户名、密码等

springboot 动态加密数据源url、用户名、密码等

使用 jasypt技术 对 配置文件中的敏感信息进行加密
可以访问官网 http://www.jasypt.org/howtoencryptuserpasswords.html
对应的github地址 https://github.com/ulisesbocchio/jasypt-spring-boot

  1. 在项目pom中引入依赖
       
            com.github.ulisesbocchio
            jasypt-spring-boot-starter
            1.16
        
  1. 查看官方文档我们可以看出,有一个配置是必须要配的,在我们的项目yml配置密钥springboot 动态加密数据源url、用户名、密码等_第1张图片
  2. 就以上两步说明加密在我们项目中已经配置成功了,接下来我们看如何使用它。写一个测试接口类,如下:
package com.test.api.controller;

import org.apache.commons.lang3.StringUtils;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Author: Mr sheng.z
 * @Description:
 * @Date: Create in 13:29 2019/10/18
 */
@RestController
@RequestMapping(value = "/test")
@ResponseBody
public class test {
    
    @Autowired
    StringEncryptor encryptor;
    
    @RequestMapping(value = "/encrypt",method = RequestMethod.GET)
    public String encrypt(@RequestParam("encryptId") String encryptId) {
        if(StringUtils.isNotBlank(encryptId)){
            return "加密成功,密文为:     "+encryptor.encrypt(encryptId);
        }else{
            return "原始密码不能为空";
        }

    }

    @RequestMapping(value = "/decrypt",method = RequestMethod.GET)
    public String decrypt(@RequestParam("decryptId") String decryptId) {
        if(StringUtils.isNotBlank(decryptId)){
            return "解密成功,原始密码为:    "+encryptor.decrypt(decryptId);
        }else{
            return "加密后密码不能为空";
        }
    }
}

我们可以单独访问接口,不管是加密或者接口都可以正常返回。注意:我们在每次加密的结果都不一样,解密的结果是一样的。

  1. 根据上面明文的加密结果,我们替换我们yml中的配置,记住我们替换原始密文的时候,外面需要用ENC(…)括起来,不要问为什么使用ENC,这是官方约定俗成的,把得到的密文写到需要使用到的地方,格式如下:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: ENC(65kIT8+ez18kZ01Gvp1UQq79Dd2Ci9Jbfd8cP/SB0qH9LYv2CrcQGutI+DVJRcVNFAj71+R5y7utUW6j02EAJg==)
    username: ENC(cFzamMmx8SIZ287xbAekpg==)
    password: ENC(Epzczby34gAwn5Shlr4u3A==)
    type: com.alibaba.druid.pool.DruidDataSource

5.按照如上一顿操作配置的话,基本上数据源或者敏感信息加密就OK了。

6.有没有发现密钥和配置文件是放在一起的,这样不安全,我们可以单独在启动类中设置password,这样分开放的好处显而易见。
springboot 动态加密数据源url、用户名、密码等_第2张图片

需要注意的点:
1.jasypt.encryptor.password 密钥必须配置,否则会报错
2.springboot2.x以下的版本,只能用jasypt1.x的版本,否则会报错

你可能感兴趣的:(spring-boot-专题)