zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    koa学习
    nodejs工作大全
    《程序员周先生之前端开发面试题》
    使用vue技术应当使用的技术和兼容性选择
    IdentityServer4简单入门demo系列 (一)认证服务端
    IdentityServer4客户端获取Token的方法
    wpf 右键菜单的使用
    wpf 在用户控件里,关掉父级窗口
    EntityFramework集成Sqlite的详细步骤
    wpf DataGrid 里的列模版的值绑定
  • 原文地址:https://www.cnblogs.com/ljb161108/p/11334256.html
Copyright © 2011-2022 走看看