首页 > 电脑专区 > 电脑教程 >

Spring boot+Druid使用密码加密后不起作用案例

来源:互联网 2023-02-20 23:44:25 383

在配置文件中直接使用明文保存数据库连接的用户密码,这种方式是不安全的,所以我们需要对该密码进行加密保存,让后在使用中进行解密处理,这里介绍如何使用Druid进行密码加密配置和使用。NEm办公区 - 实用经验教程分享!

工具/原料

  • Spring boot
  • Druid

方法/步骤

  • 1

    首先我们使用Druid包的自带密码加密工具对我们的密码进行加密NEm办公区 - 实用经验教程分享!

    如下所示,我们可以得到私钥、公钥和密码密文:NEm办公区 - 实用经验教程分享!

    C:\Users\Administrator>cd /d C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.1.6NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.1.6>java -cp druid-1.1.6.jar com.alibaba.druid.filter.config.ConfigTools passwordNEm办公区 - 实用经验教程分享!

    privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwfk3zil6HQGe8QFz9UbttPds8k/JgEm6/feCl4cCmFW1DP7PKD2/TLFZCoeFFRhC1hqOEBhpadrR013huuFTQIDAQABAkAr4Cg2TP twx8rD2xcz11IxM3wb/N/d/A1twFzY5mjzeXihuoZrefje1WN2q36YhAiEA5GgcdSV0qwYxAkUS24tgFp1EPlTmNKAa2YRWYUNUJkCIQCpRsuO9PrEVf8morsx5VousmyapnoOtW5Y7663zp7m1QIgb8sZaqkbkn3kTPUcBsMQE GDvnJ1fnqCyrneQg idbkCIGmzXkqPKMNOm7upY9C9UXnVSkGrcI4ctqHsUKJP8CNdAiEAnr2gYIT1EO3dPVpTyguKCxpawMnhQ/biwDUyzYb5mAw=NEm办公区 - 实用经验教程分享!

    publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcH5N84peh0BnvEBc/VG7bT3bPJPyYBJuv33gpeHAphVtQz zyg9v0yxWQqHhRUYQtYajhAYaWna0dNd4brhU0CAwEAAQ==NEm办公区 - 实用经验教程分享!

    password:gXhFklHpK8L6Z39gjA0lFccC7zHREii6FLXtW43h8yqH 47Hbat6URMhX6R3X4qMunhpxfWlisoZXqnFLlbEcw==NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

  • 2

    在Spring boot的配置文件中配置密码和config filter.NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSourceNEm办公区 - 实用经验教程分享!

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/videoDBNEm办公区 - 实用经验教程分享!

    spring.datasource.username=rootNEm办公区 - 实用经验教程分享!

    spring.datasource.password=passwordNEm办公区 - 实用经验教程分享!

    spring.datasource.filters=stat,log4j,wall,configNEm办公区 - 实用经验教程分享!

    spring.datasource.driver-class-name=com.mysql.jdbc.DriverNEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    spring.datasource.maxActive=20NEm办公区 - 实用经验教程分享!

    spring.datasource.max-idle=10NEm办公区 - 实用经验教程分享!

    spring.datasource.max-wait=10000NEm办公区 - 实用经验教程分享!

    spring.datasource.min-idle=5NEm办公区 - 实用经验教程分享!

    spring.datasource.initial-size=5NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

  • 3

    配置数据源的用户密码以及解密的配置选项,password和connectionProperties属性:NEm办公区 - 实用经验教程分享!

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSourceNEm办公区 - 实用经验教程分享!

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/videoDBNEm办公区 - 实用经验教程分享!

    spring.datasource.username=rootNEm办公区 - 实用经验教程分享!

    spring.datasource.password=gXhFklHpK8L6Z39gjA0lFccC7zHREii6FLXtW43h8yqH 47Hbat6URMhX6R3X4qMunhpxfWlisoZXqnFLlbEcw==NEm办公区 - 实用经验教程分享!

    spring.datasource.driver-class-name=com.mysql.jdbc.DriverNEm办公区 - 实用经验教程分享!

    spring.datasource.filters=stat,log4j,wall,configNEm办公区 - 实用经验教程分享!

    spring.datasource.connectionProperties=config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcH5N84peh0BnvEBc/VG7bT3bPJPyYBJuv33gpeHAphVtQz zyg9v0yxWQqHhRUYQtYajhAYaWna0dNd4brhU0CAwEAAQ==NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

  • 4

    启动Spring boot应用进行测试NEm办公区 - 实用经验教程分享!

    1)启动ApplicationNEm办公区 - 实用经验教程分享!

    2)测试有数据库连接服务的操作,如视频文件的上传NEm办公区 - 实用经验教程分享!

    这时候可以测试可以知道数据库信息入库失败,日志提示数据库连接失败:NEm办公区 - 实用经验教程分享!

    2018-01-17 15:10:20.481 ERROR 1144 --- [Create-15674126] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/videoDB, errorCode 1045, state 28000NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)NEm办公区 - 实用经验教程分享!

    3)说明我们配置的解密过滤器没有生效,这也说明了根据Spring Boot Druid是存在兼容性问题的,因为官方的样例是使用Spring Druid的模式NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

  • 5

    最后得到的结论是:Druid与Spring Boot的兼容性问题还是比较多的,不建议使用该组合。NEm办公区 - 实用经验教程分享!

    从项目提交的问题来看,也体现出与Spring Boot的兼容性问题,具体问题如下图所示。NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

  • 6

    最后这里提供过一种方法解决该问题,就是自定义DataSource配置文件解析类,初始化Druid的数据源,让其支持加密后的密文:NEm办公区 - 实用经验教程分享!

    1)创建一个配置文件读初始化类DataSourceConfigNEm办公区 - 实用经验教程分享!

    该类主要完成DataSource个参数值得获取和解析,采用注解Configuration方式,主要的代码如下:NEm办公区 - 实用经验教程分享!

    package image.dao;NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    import java.sql.SQLException;NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    import javax.sql.DataSource;NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    import org.slf4j.Logger;NEm办公区 - 实用经验教程分享!

    import org.slf4j.LoggerFactory;NEm办公区 - 实用经验教程分享!

    import org.springframework.boot.context.properties.ConfigurationProperties;NEm办公区 - 实用经验教程分享!

    import org.springframework.context.annotation.Bean;NEm办公区 - 实用经验教程分享!

    import org.springframework.context.annotation.Configuration;NEm办公区 - 实用经验教程分享!

    import org.springframework.context.annotation.Primary;NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    import com.alibaba.druid.pool.DruidDataSource;NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    @ConfigurationNEm办公区 - 实用经验教程分享!

    @ConfigurationProperties(prefix="spring.datasource")NEm办公区 - 实用经验教程分享!

    public class DataSourceConfig {NEm办公区 - 实用经验教程分享!

    private Logger logger=LoggerFactory.getLogger(DataSourceConfig.class);NEm办公区 - 实用经验教程分享!

    private String type;NEm办公区 - 实用经验教程分享!

    private String url;NEm办公区 - 实用经验教程分享!

    private String driverClassName;NEm办公区 - 实用经验教程分享!

    private String username;NEm办公区 - 实用经验教程分享!

    private String password;NEm办公区 - 实用经验教程分享!

    private String filters;NEm办公区 - 实用经验教程分享!

    private String connectionProperties;NEm办公区 - 实用经验教程分享!

    public String getType() {NEm办公区 - 实用经验教程分享!

    return type;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setType(String type) {NEm办公区 - 实用经验教程分享!

    this.type = type;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public String getUrl() {NEm办公区 - 实用经验教程分享!

    return url;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setUrl(String url) {NEm办公区 - 实用经验教程分享!

    this.url = url;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public String getDriverClassName() {NEm办公区 - 实用经验教程分享!

    return driverClassName;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setDriverClassName(String driverClassName) {NEm办公区 - 实用经验教程分享!

    this.driverClassName = driverClassName;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public String getUsername() {NEm办公区 - 实用经验教程分享!

    return username;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setUsername(String username) {NEm办公区 - 实用经验教程分享!

    this.username = username;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public String getPassword() {NEm办公区 - 实用经验教程分享!

    return password;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setPassword(String password) {NEm办公区 - 实用经验教程分享!

    this.password = password;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public String getFilters() {NEm办公区 - 实用经验教程分享!

    return filters;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setFilters(String filters) {NEm办公区 - 实用经验教程分享!

    this.filters = filters;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public String getConnectionProperties() {NEm办公区 - 实用经验教程分享!

    return connectionProperties;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    public void setConnectionProperties(String connectionProperties) {NEm办公区 - 实用经验教程分享!

    this.connectionProperties = connectionProperties;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    @BeanNEm办公区 - 实用经验教程分享!

    @PrimaryNEm办公区 - 实用经验教程分享!

    public DataSource druidDataSource()NEm办公区 - 实用经验教程分享!

    {NEm办公区 - 实用经验教程分享!

    DruidDataSource dataSource=new DruidDataSource();NEm办公区 - 实用经验教程分享!

    dataSource.setUrl(url);NEm办公区 - 实用经验教程分享!

    dataSource.setUsername(username);NEm办公区 - 实用经验教程分享!

    dataSource.setPassword(password);NEm办公区 - 实用经验教程分享!

    dataSource.setDriverClassName(driverClassName);NEm办公区 - 实用经验教程分享!

    NEm办公区 - 实用经验教程分享!

    dataSource.setConnectionProperties(connectionProperties);NEm办公区 - 实用经验教程分享!

    try {NEm办公区 - 实用经验教程分享!

    dataSource.setFilters(filters);NEm办公区 - 实用经验教程分享!

    } catch (SQLException e) {NEm办公区 - 实用经验教程分享!

    e.printStackTrace();NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    logger.info(">>>>>>>>>>>>>>>>>>>>>>Druid DataSource init>>>>>>>>>>>");NEm办公区 - 实用经验教程分享!

    return dataSource;NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

    }NEm办公区 - 实用经验教程分享!

  • 7

    运行Spring boot的程序,进行视频文件数据的上传,检查数据库连接是否正常NEm办公区 - 实用经验教程分享!

    1)启动Spring boot主类Application,可以看到日志输出了自定义的DruidDataSource初始化成功NEm办公区 - 实用经验教程分享!

    [ restartedMain] image.dao.DataSourceConfig : >>>>>>>>>>>>>>>>>>>>>>Druid DataSource init>>>>>>>>>>>NEm办公区 - 实用经验教程分享!

    2)在浏览器中访问视频上传的功能页面,进行视频文件上传,成功后可以看到数据库插入了一条心的记录,没有错误出现,说明我们已经解决了该问题NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

    Spring boot Druid使用密码加密后不起作用案例NEm办公区 - 实用经验教程分享!

  • 7此文章未经授权抓取自百度经验
  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!NEm办公区 - 实用经验教程分享!


    标签: 操作系统使用密码作用

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码