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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM