SSM项目的数据库密码加密方案
项目主要采用: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解密密码
有三种方式配置:
- 可以在配置文件my.properties中指定config.decrypt=true
- 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
- 也可以在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&characterEncoding=UTF-8&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 使用需求 2 使用步骤 1 准备一个SpringBoot项目环境 2 添加jasypt的jar包 3 创建一个测试类 4 修改配置文件 5 启动项目,访问忌口 6 ...
- druid ssh加密 java mysql_springboot 整合druid数据库密码加密功能的实现代码
在之前给大家介绍过Springboot Druid 自定义加密数据库密码的几种方案,感兴趣的朋友可以点击查看下,今天通过本文给大家介绍springboot 整合druid数据库密码加密功能,具体内容如 ...
- mysql数据库druid密码加密_Druid数据库密码加密
背景 数据库密码直接写在配置中,对安全来说,是一个很大的挑战.Druid为此提供一种数据库密码加密的手段ConfigFilter. druid版本为1.1.18. 加密 1.项目中引入依赖 com.a ...
- Spring配置数据库密码加密
在项目中,为了提高安全性,需要对配置文件中的部分敏感信息进行加密,如数据库登录密码等.以下是一个简单的数据库密码加密示例,供大家一起学习交流,有不对或者需要改进的地方,请大家多多指教! 一. 未加密情 ...
- java配置文件中数据库密码加密
最近,有位读者私信我说,他们公司的项目中配置的数据库密码没有加密,编译打包后的项目被人反编译了,从项目中成功获取到数据库的账号和密码,进一步登录数据库获取了相关的数据,并对数据库进行了破坏. 虽然这次 ...
- druid连接池配置数据库密码加密
druid配置数据库密码加密后,可以把密码放在配置文件里,或本地其他文件.远程服务器等三种地方,这里只讲第一种方法. 1.密码加密:cd到druid包所在文件夹打开命令行,输入 java -cp dr ...
- SpringBoot配置文件敏感信息加密,springboot配置文件数据库密码加密jasypt
使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...
- 使用durid的ConfigFilter对数据库密码加密
原文连接:http://blog.csdn.net/aixiaoyang168/article/details/49930513 ----------------------------------- ...
- TOMCAT 连接池数据库密码加密方法
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原文来自 ...
最新文章
- linux更改文件夹权限_Linux 一些重点知识,整理的很全面,有必要收藏
- vue.js - advance - render 函数小抄
- NOI2007 货币兑换 - CDQ分治斜率优化dp
- CSS从大图中抠取小图完整教程(background-position应用)
- SAP IBASE的创建实现逻辑
- Angularjs调用公共方法与共享数据
- charles抓包工具使用指南
- sqlite3简单操作
- labview报表生成工具包_后台开发java 常见工具包 netty、mq 、分布式锁等,干货
- 安装第三方插件BeautifulSoup
- Python中DataFrame去重
- C#正则表达式 — 正则表达式类
- 用python排序算法_用Python实现常见的排序算法
- java内存泄露 垃圾回收_Java中内存泄露及垃圾回收机制
- 89 个操作系统核心概念
- MATLAB——根轨迹原理及其Matlab绘制
- SAP ABAP 配置表开发常见问题总结与开发指南(SM30 SM34 SE54)
- 【信号系统实验2】MATLAB—连续时间信号与系统的频域分析
- AutoCAD.NET API2018二次开发第十九章
- 8路抢答器,有裁判复位