zoukankan      html  css  js  c++  java
  • SpringBoot 5、Springboot 链接Druid ,配置数据库监控、数据库密码加密

    Druid常识看这里Druid wiki ,中文wiki 和源码中文注释太友好啦

    1 从maven仓库找到druid maven 地址 mvnrepository

    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
    </dependency>
    2 指定datasource

    spring:
    datasource:
    username: root
    password: 123456
    url: jdbc:mysql://10.10.8.27:3306/jdbc
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    3 testDatasource报错

    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
    No qualifying bean of type 'org.apache.tomcat.jdbc.pool.DataSource' available:
    expected at least 1 bean which qualifies as autowire candidate.
    Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    仔细看才发现导错包了 晕。。

    import javax.sql.DataSource; 导成
    import org.apache.tomcat.jdbc.pool.DataSource;
    4 配置DataSource properties

    springboot 对druid许多配置不自动支持,需要配置自定义配置类,class add anotation @Configration

    创建DruidDataSource 加入容器

    @Configuration
    public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource dataSource(){
    return new DruidDataSource();
    }
    }

    2 配置druid 监控:配置管理后台的Servlet和监控filter,在druid wiki 中例子是配置在web.xml,我们是在配置类DruidConfig编码实现,http://localhost:8080/druid/ 登录,查看监控信息

    @Bean
    public ServletRegistrationBean statViewServlet(){
    ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    Map<String,String> initMap = new HashMap<>();
    initMap.put("loginUsername","admin");
    initMap.put("loginPassword","123456");
    initMap.put("allow","");
    //initMap.put("deny","");
    //initMap.put("remoteAddress","");
    bean.setInitParameters(initMap);
    return bean;
    }

    @Bean
    public FilterRegistrationBean webStatFilter(){
    FilterRegistrationBean bean = new FilterRegistrationBean();
    //bean.setFilter(new WebStatFilter());
    bean.setFilter(new WebStatFilter());

    Map<String, String> initParams = new HashMap<>();
    initParams.put("exclusions","*.js,*.css,/druid/*");
    bean.setInitParameters(initParams);
    bean.setUrlPatterns(Arrays.asList("/*"));
    return bean;
    }
    3 使用ConfigFilter 数据库密码加密:

    首先使用druid jar包的ConfigTools 生成公钥、私钥和密码

    D:\RepMaven\com\alibaba\druid\1.1.8>java -cp druid-1.1.8.jar com.alibaba.druid.filter.config.ConfigTools 123456
    privateKey:MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAoPyZ0cbZCrpU9JocMLYL3+aNxa/d/+4RzRyaC0N4lcxngLrzhnB/zWnFIs+H93b01I/QUKSj6p1mvZvdzZHuBQIDAQABAkEAkmIeXCm74Y1dAq2/RGvEkGtMLp2j97u6ZA/F4sgPNeWXM0ROJbTqvdcq4rMEdmQluzNXVoT4wWMtX9fOWcoyAQIhAPdCDj7ypzoS40Swmy+2rJ6yK5GxhwzatOm1hMIPmSNRAiEApq2zDqUGembDxmjMApHtpecsLluidMVZY7CsM0bRqnUCIQDVIg99m1Ui7h0RnNpoaqKpuRNtZwXuwqenvVxOm3t5wQIgOshdstd+fmKJvwqskGd4wZ7S1RKaK8aB7Qec44ShYxUCIAK75AKHddj/bU8nxOb+ri2xULzLwkWh0APvHJNucZTc
    publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKD8mdHG2Qq6VPSaHDC2C9/mjcWv3f/uEc0cmgtDeJXMZ4C684Zwf81pxSLPh/d29NSP0FCko+qdZr2b3c2R7gUCAwEAAQ==
    password:UH3YiRWSqXlwwxBQ6tL7smdS4I9CQksW+CrJsjRQmfNGHu2AXxLwjsN0rq//YPWaOEagFX6kWXZNVCFbVVyx/A==
    其次 修改数据库配置,将原来的明文密码改为加密后的密码,spring.datasource.filters 增加config,connection properties启用加密,配置公钥

    spring:
    datasource:
    username: root
    # 生成的加密后的密码(原密码 123456)
    password: UH3YiRWSqXlwwxBQ6tL7smdS4I9CQksW+CrJsjRQmfNGHu2AXxLwjsN0rq//YPWaOEagFX6kWXZNVCFbVVyx/A==
    url: jdbc:mysql://10.10.8.255:3306/jdbc
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙,config启用ConfigFilter,可以用于加密和读取配置文件
    filters: stat,wall,log4j,config
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    # 配置 connection-properties,启用加密,配置公钥。
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKD8mdHG2Qq6VPSaHDC2C9/mjcWv3f/uEc0cmgtDeJXMZ4C684Zwf81pxSLPh/d29NSP0FCko+qdZr2b3c2R7gUCAwEAAQ==
    除了WIKI,这篇文章推荐学习
    Druid连接池自定义数据库密码加解密的实现
    来一段com.alibaba.druid.filter.config.ConfigTools 中解密方法乐一下^_^
    public static String decrypt(PublicKey publicKey, String cipherText)
    throws Exception {
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    try {
    cipher.init(Cipher.DECRYPT_MODE, publicKey);
    } catch (InvalidKeyException e) {
    // 因为 IBM JDK 不支持私钥加密, 公钥解密, 所以要反转公私钥
    // 也就是说对于解密, 可以通过公钥的参数伪造一个私钥对象欺骗 IBM JDK
    RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
    RSAPrivateKeySpec spec = new RSAPrivateKeySpec(rsaPublicKey.getModulus(), rsaPublicKey.getPublicExponent());
    Key fakePrivateKey = KeyFactory.getInstance("RSA").generatePrivate(spec);
    cipher = Cipher.getInstance("RSA"); //It is a stateful object. so we need to get new one.
    cipher.init(Cipher.DECRYPT_MODE, fakePrivateKey);
    }

    if (cipherText == null || cipherText.length() == 0) {
    return cipherText;
    }

    byte[] cipherBytes = Base64.base64ToByteArray(cipherText);
    byte[] plainBytes = cipher.doFinal(cipherBytes);

    return new String(plainBytes);
    }


    5. 怎么打开Druid的监控统计功能
    Druid的监控统计功能是通过filter-chain扩展实现,如果你要打开监控统计功能,配置StatFilter,具体看这里:https://github.com/alibaba/druid/wiki/配置_StatFilter

    Druid内置提供一个StatFilter,用于统计监控信息。

    6. 怎样使用Druid的内置监控页面
    内置监控页面是一个Servlet,具体配置看这里:https://github.com/alibaba/druid/wiki/配置_StatViewServlet配置

    Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。

    <!-- 配置 Druid 监控信息显示页面 -->
    <servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
    <!-- 允许清空统计数据 -->
    <param-name>resetEnable</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <!-- 用户名 -->
    <param-name>loginUsername</param-name>
    <param-value>druid</param-value>
    </init-param>
    <init-param>
    <!-- 密码 -->
    <param-name>loginPassword</param-name>
    <param-value>druid</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>
    7. 内置监控中的Web和Spring关联监控怎么配置?
    Web关联监控配置
    https://github.com/alibaba/druid/wiki/配置_配置WebStatFilter
    Spring关联监控配置
    https://github.com/alibaba/druid/wiki/配置_Druid和Spring关联监控配置
    <filter>
    <filter-name>DruidWebStatFilter</filter-name>
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
    <init-param>
    <param-name>exclusions</param-name>
    <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    ————————————————
    版权声明:本文为CSDN博主「QIANQIANCHEN0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/QIANQIANCHEN0/article/details/80906605

  • 相关阅读:
    Linux 安装 Redis
    IDEA 安装 VisualVM 插件
    Linux安装Erlang和RabbitMQ
    vue Uncaught Error: Redirected when going from “/*“ to “/*“ 路由报错
    gerrit安装指南
    【.NET技术栈】数据库与Entityframework Core目录
    vue-cli3.0/4.0搭建项目
    安装nodejs并搭建vue项目
    Vue学习之vue-cli脚手架下载安装及配置
    写在强基录取之后
  • 原文地址:https://www.cnblogs.com/javalinux/p/15662553.html
Copyright © 2011-2022 走看看