项目主要采用:SpringMVC4.3.2.RELEASE +Spring4.3.2.RELEASE + Maven 3.3.3 + druid 1.0.29 + Mybatis 3.2.8 + Mysql 5.1.21 + Jquery 1.7.2 + JSP

开发工具如下:IDEA 2016

利用druid对数据库密码进行加密:

参考文章:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

ConfigFilter的作用包括:

  • 从配置文件中读取配置
  • 从远程http文件中读取配置
  • 为数据库密码提供加密功能

1 配置ConfigFilter

1.1 配置文件从本地文件系统中读取

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><property name="filters" value="config" /><property name="connectionProperties" value="config.file=file:///home/admin/druid-pool.properties" /></bean>

1.2 配置文件从远程http服务器中读取

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><property name="filters" value="config" /><property name="connectionProperties" value="config.file=http://127.0.0.1/druid-pool.properties" /></bean>

这种配置方式,使得一个应用集群中,多个实例可以从同一个地方读取配置,集中配置,集中修改,部署更简单。

1.3 通过jvm启动参数来使用ConfigFilter

DruidDataSource支持jvm启动参数配置filters,所以你可以:

java -Ddruid.filters=config ....

2 数据库密码加密

数据库密码直接写在配置中,对运维安全来说,是一个很大的挑战。Druid为此提供一种数据库密码加密的手段ConfigFilter。

2.1 执行命令加密数据库密码

在命令行中执行如下命令:

java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password

输出

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==

输入你的数据库密码,输出的是加密后的结果。

2.2 配置数据源,提示Druid数据源需要对数据库密码进行解密。

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><property name="url" value="jdbc:derby:memory:spring-test;create=true" /><property name="username" value="sa" /><property name="password" value="${password}" /><property name="filters" value="config" /><property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publickey}" />
</bean>

2.3 配置参数,让ConfigFilter解密密码

有三种方式配置:

  1. 可以在配置文件my.properties中指定config.decrypt=true
  2. 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
  3. 也可以在jvm启动参数中指定-Ddruid.config.decrypt=true

=======================================================================================

本人自己的文件配置如下:

jdbc.properties

#JDBCdriver
#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.driverClassName=com.mysql.jdbc.Driver#JDBC
jdbc.url=jdbc\:mysql\://127.0.0.1:3306/ssmredis?useUnicode=true&amp;characterEncoding=UTF-8&amp;allowMultiQueries=true
#jdbc.url=jdbc:oracle:thin:@91.4.0.76:15521:sjbb
#oracle account/password
#jdbc.username=edpdata
#jdbc.password=edpdata#123
#mysql account/password
jdbc.username=root
jdbc.password=root
#jdbc.publickey=
publicKey = MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIqAfobn0atBXjrAIWKVxh1iIy+haKqRhNwUrHN6rT4OcJs3oWSgqbPuBpjhdZUQF9MX6T6TWiLWuA6vE8qQyHcCAwEAAQ==
password = LiWSDbtVp6vEzadIgCnxlsC74tyNIT0q35OVzqiYPAa8PMKidNAklYj5YZfEdxtC/MNhW+GbxA/ZA9ib3OQyTA==jdbc.dbcp.initialSize=10
jdbc.dbcp.maxActive=500
jdbc.dbcp.maxIdle=10
jdbc.dbcp.minIdle=1
jdbc.dbcp.maxWait=120000

spring-mybatis.xml 配置信息如下:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:util="http://www.springframework.org/schema/util"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.3.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.3.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.tydic.www" /><!-- 引入配置文件 --><context:property-placeholder location="classpath:*.properties" /><!--Druid 连接池配置 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><!-- 基本属性 url、user、password --><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${password}" /><property name="filters" value="config,log4j" /><property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publicKey}" /><!-- <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${jdbc.publickey}"/> --><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="1" /><property name="minIdle" value="1" /><property name="maxActive" value="40" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="SELECT 'x' FROM DUAL" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 打开PSCache,并且指定每个连接上PSCache的大小 --><property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize"value="20" /><!-- 超过时间限制是否回收 --><property name="removeAbandoned" value="true" /><!-- 超时时间;单位为秒。180秒=3分钟 --><property name="removeAbandonedTimeout" value="1800" /><!-- 关闭abanded连接时输出错误日志 --><property name="logAbandoned" value="true" /><!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --><!-- property name="filters" value="stat" / --></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatis/myBatis.xml"></property><property name="dataSource" ref="dataSource"></property><property name="mapperLocations"><list><value>classpath:com/tydic/www/mapper/*.xml</value></list></property></bean><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.tydic.www.dao" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- advice:通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="select*" read-only="true"/><tx:method name="query*" read-only="true"/><tx:method name="get*" read-only="true"/><tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/><tx:method name="*" propagation="REQUIRES_NEW" rollback-for="Exception"/></tx:attributes></tx:advice><!-- 切入 --><aop:config expose-proxy="true"><!-- 只对业务逻辑层实施事务 --><aop:pointcut id="txPointcut" expression="execution(* com.tydic.www.service..*.*(..))" /><!-- Advisor定义,切入点和通知分别为txPointcut、txAdvice --><aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/></aop:config></beans>

<property name="filters" value="config,log4j" />
<property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publicKey}" />红色的配置信息主要功能如下:加载加密的密码密文并解析密文。log4j这个是打印mybatis的sql语句的功能

SSM项目的数据库密码加密方案相关推荐

  1. 关于项目中数据库密码加密的使用

    关于项目中数据库密码加密的使用 1 使用需求 2 使用步骤 1 准备一个SpringBoot项目环境 2 添加jasypt的jar包 3 创建一个测试类 4 修改配置文件 5 启动项目,访问忌口 6 ...

  2. druid ssh加密 java mysql_springboot 整合druid数据库密码加密功能的实现代码

    在之前给大家介绍过Springboot Druid 自定义加密数据库密码的几种方案,感兴趣的朋友可以点击查看下,今天通过本文给大家介绍springboot 整合druid数据库密码加密功能,具体内容如 ...

  3. mysql数据库druid密码加密_Druid数据库密码加密

    背景 数据库密码直接写在配置中,对安全来说,是一个很大的挑战.Druid为此提供一种数据库密码加密的手段ConfigFilter. druid版本为1.1.18. 加密 1.项目中引入依赖 com.a ...

  4. Spring配置数据库密码加密

    在项目中,为了提高安全性,需要对配置文件中的部分敏感信息进行加密,如数据库登录密码等.以下是一个简单的数据库密码加密示例,供大家一起学习交流,有不对或者需要改进的地方,请大家多多指教! 一. 未加密情 ...

  5. java配置文件中数据库密码加密

    最近,有位读者私信我说,他们公司的项目中配置的数据库密码没有加密,编译打包后的项目被人反编译了,从项目中成功获取到数据库的账号和密码,进一步登录数据库获取了相关的数据,并对数据库进行了破坏. 虽然这次 ...

  6. druid连接池配置数据库密码加密

    druid配置数据库密码加密后,可以把密码放在配置文件里,或本地其他文件.远程服务器等三种地方,这里只讲第一种方法. 1.密码加密:cd到druid包所在文件夹打开命令行,输入 java -cp dr ...

  7. SpringBoot配置文件敏感信息加密,springboot配置文件数据库密码加密jasypt

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

  8. 使用durid的ConfigFilter对数据库密码加密

    原文连接:http://blog.csdn.net/aixiaoyang168/article/details/49930513 ----------------------------------- ...

  9. TOMCAT 连接池数据库密码加密方法

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原文来自 ...

最新文章

  1. linux更改文件夹权限_Linux 一些重点知识,整理的很全面,有必要收藏
  2. vue.js - advance - render 函数小抄
  3. NOI2007 货币兑换 - CDQ分治斜率优化dp
  4. CSS从大图中抠取小图完整教程(background-position应用)
  5. SAP IBASE的创建实现逻辑
  6. Angularjs调用公共方法与共享数据
  7. charles抓包工具使用指南
  8. sqlite3简单操作
  9. labview报表生成工具包_后台开发java 常见工具包 netty、mq 、分布式锁等,干货
  10. 安装第三方插件BeautifulSoup
  11. Python中DataFrame去重
  12. C#正则表达式 — 正则表达式类
  13. 用python排序算法_用Python实现常见的排序算法
  14. java内存泄露 垃圾回收_Java中内存泄露及垃圾回收机制
  15. 89 个操作系统核心概念
  16. MATLAB——根轨迹原理及其Matlab绘制
  17. SAP ABAP 配置表开发常见问题总结与开发指南(SM30 SM34 SE54)
  18. 【信号系统实验2】MATLAB—连续时间信号与系统的频域分析
  19. AutoCAD.NET API2018二次开发第十九章
  20. 8路抢答器,有裁判复位

热门文章

  1. C语言诠释--为什么内存是线性分布的。
  2. 新手搭建阿里云FTP服务器
  3. 如何安装系统认证签名过的APK
  4. oracle错误:ORA-12545
  5. C++ 智能指针详解
  6. consul agent的一个故障
  7. 标签之美三——超链接的嵌入
  8. KVO方式监听数组的变化动态刷新tableView
  9. 了解多线程中的yield
  10. Android事件总线还能怎么玩?