精华内容
下载资源
问答
  • 博客地址 https://blog.csdn.net/u013271384/article/details/81153712
  • 1.pom文件中加入依赖,注意这里版本不能太高,我之前用的3.0.2,一直报错(Failed to bind properties under ‘spring.datasource.password‘ to java.lang.String),踩坑记录下 <dependency> <...

    1.pom文件中加入依赖,注意这里版本不能太高,我之前用的3.0.2,一直报错(Failed to bind properties under ‘spring.datasource.password‘ to java.lang.String),踩坑记录下

        	<dependency>
    			<groupId>com.github.ulisesbocchio</groupId>
    		    <artifactId>jasypt-spring-boot-starter</artifactId>
    		    <version>2.1.2</version>
            </dependency>

    2.找到本地maven仓库中的jasypt-1.9.3.jar所在位置,如图所示

    3.在该位置打开cmd,执行如下命令获取密文,java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=sa password=abc algorithm=PBEWithMD5AndDES

    input后面的就是你要加密的内容,password就是加的盐

    4.用户名和密码分别执行一次,将output内容加入替换到yml文件中(前面加上ENC),另外配置好盐,如下所示

    jasypt:
         encryptor:
           password: abc
           algorithm: PBEWithMD5AndDES
    
    spring:
      datasource: &base
        url: jdbc:sqlserver://192.168.10.177:1433;DatabaseName=CCTV_cz
        username: ENC(YcfO9HSylqKcG7iZ//vs0w==)
        password: ENC(YcfO9HSylqKcG7iZ//vs0w==)

    5.最后再在application启动类中加入@EnableEncryptableProperties注解即可

    展开全文
  • 传统JAVA_WEB项目如果是ssh、ssm之类的搭建的项目,其数据库链接信息大部分是交给Spring来作为管理 数据库的URL地址、账号、密码一般会写在配置文件中:dbconfig.properties里或者是在system-config.properties在...

    传统JAVA_WEB项目如果是ssh、ssm之类的搭建的项目,其数据库链接信息大部分是交给Spring来作为管理

    数据库的URL地址、账号、密码一般会写在配置文件中:dbconfig.properties里或者是在system-config.properties在或者是在applicationContext-datasource.xml配置,无非就是这几种。在或者是你的数据库链接信息在项目的那个自己命名的配置文件里面记录。

    为了做到保护数据安全、版权原因等一些效果。提出需求要对项目中所有涉及数据库链接信息地方的账号密码进行加密

    在这里插入图片描述
    思路:在项目开始运行之前,先使用加密程序把正确的明文密码进行加密得到密文信息,修改配置文件中的password为密文,在项目启动的时候要把这个密文进行解开为明文、让spring链接数据库使用

    1. 加密解密程序(使用开源MD5加密解密)可以修改加密程序,加上自己的独特的字符串数字之类的逻辑、就是自己独特的加密程序了。
    import java.security.MessageDigest;
     
    /**
     * MD5技术加密解密
     */
    public class MD5Tools {
        /***
         * MD5加码 生成32位md5码
         */
        public static String string2MD5(String inStr){
            MessageDigest md5 = null;
            try{
                md5 = MessageDigest.getInstance("MD5");
            }catch (Exception e){
                System.out.println(e.toString());
                e.printStackTrace();
                return "";
            }
            char[] charArray = inStr.toCharArray();
            byte[] byteArray = new byte[charArray.length];
     
            for (int i = 0; i < charArray.length; i++)
                byteArray[i] = (byte) charArray[i];
            byte[] md5Bytes = md5.digest(byteArray);
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++){
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16)
                    hexValue.append("0");
                hexValue.append(Integer.toHexString(val));
            }
            return hexValue.toString();
     
        }
     
        /**
         * 加密解密算法 执行一次加密,两次解密
         */
        public static String convertMD5(String inStr){
     
            char[] a = inStr.toCharArray();
            for (int i = 0; i < a.length; i++){
                a[i] = (char) (a[i] ^ 't');
            }
            String s = new String(a);
            return s;
     
        }
     
        // 测试主函数
        public static void main(String args[]) {
            String s = new String("rootroot");
            System.out.println("原始:" + s);
            System.out.println("MD5后:" + string2MD5(s));
            System.out.println("解密的:" + convertMD5(convertMD5(s)));
     
        }
    }
    
    

    在这里插入图片描述
    2.数据库的链接信息、如果配置是在****.xml里面需要移动链接信息配置到****…properties中。如果项目中没有****…properties就自己新建一个、然后*******.xml中使用占位符。如果项目的数据库链接信息已经在****…properties就不用再修改了(移动的目的是读取配置文件信息时候,****…properties比********.xml读取方便)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.在项目启动时候让spring加载自定义的类,进行密码解密。按照图中配置信息进行配置,注意自定义类的名称和路径。
    在这里插入图片描述

    package com.xxx.utils;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Properties;
    import org.springframework.util.DefaultPropertiesPersister;
    
    
    //该类继承spring的读取配置文件的类使spring启动时会加载这个类进行解密(需要在配置文件里面配置这个类的名称才会进行加载)
    //本项目是在applicationContext-datasource.xml里面配置了
    //项目启动时候可以在这个类中打断点进入看解密过程
    public class PropertiesPersist extends DefaultPropertiesPersister{
     @Override
    public void load(Properties props, InputStream is) throws IOException {
    	 //读取到配置文件(****..properties)信息内容
    	 Properties properties=new Properties();
    	 properties.load(is);
    	 //判断读取配置文件中的信息是否为password属性
    	 if(properties.get("password")!=null){
    		 System.out.println("==========密文======="+properties.get("password"));
    		 System.out.println("===================进行配置数据库密码解密、注入配置文件===");
    		 //进行解密
    		 String password=MD5Tools.convertMD5(properties.get("password").toString().trim());
    		 //在写入到配置文件中
    		 properties.setProperty("password", password);
    	 }
    	 OutputStream outputStream=null;
    	 try {
    		 outputStream=new ByteArrayOutputStream();
    		 properties.store(outputStream, "");
    		 is=outStream2InputStream(outputStream);
    		 super.load(props, is);
    		 System.out.println("=========配置数据库密码解密、注入配置文件=========【Success】==");
    		 System.out.println("=======注入的明文密码======:" +properties.get("password"));
    	} catch (Exception e) {
    		try {
    			throw e;
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		}
    	}finally{
    		outputStream.close();
    	}
    	 
    }
    
    private InputStream outStream2InputStream(OutputStream out) {
    	ByteArrayOutputStream bos=new ByteArrayOutputStream();
    	bos=(ByteArrayOutputStream) out;
    	ByteArrayInputStream swapSTream=new ByteArrayInputStream(bos.toByteArray());
    	return swapSTream;
    }
    }
    
    

    4.项目启动时候可以在自定义的类打断点,跟一下是否进入到解密类中,密码是否进行了解密,输出明文,验证为项目中没有错误的的日志信息,项目可以正常访问,加密解密到此文为止,账号加密可以参考密码加密

    展开全文
  • java web 项目数据库连接加密方式

    需求:因项目需要将数据库连接账号密码需要加密处理。

    首先,先贴出加密前配置等信息

    1、加密前的数据库连接账号、密码
    加密前的数据库连接账号、密码
    2、配置文件

    <context:property-placeholder location="classpath:db.properties"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        	<property name="driverClassName" value="${jdbc.driver}"></property>
        	<property name="url" value="${jdbc.url}"></property>
        	<property name="username" value="${jdbc.username}"></property>
        	<property name="password" value="${jdbc.password}"></property>
        </bean>
    

    其次,这是加密的处理

    1、加密后的数据库连接账号、密码
    加密后的数据库连接账号、密码
    2、修改配置文件信息

    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 上面的修改为下方代码 -->
    <context:property-placeholder location="classpath:db.properties"/>
    	<bean id="propertyConfigurer"
    		class="com.dp.core.common.EncryptPropertyPlaceholderConfigurer">
    		<property name="locations">
    			<list>
    				<value>classpath:db.properties</value>
    			</list>
    		</property>
    	</bean>
    
    <!-- 这部分不变 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        	<property name="driverClassName" value="${jdbc.driver}"></property>
        	<property name="url" value="${jdbc.url}"></property>
        	<property name="username" value="${jdbc.username}"></property>
        	<property name="password" value="${jdbc.password}"></property>
        </bean>
    

    3、新建EncryptPropertyPlaceholderConfigurer继承PropertyPlaceholderConfigurer,获取Properties对象,并将对象中的数据库账号、密码解密set(数据库账号密码的加、解密可以找其他的加密工具类加密,这里使用的是DES)

    import java.util.Properties;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
    
    public class EncryptPropertyPlaceholderConfigurer extends
    		PropertyPlaceholderConfigurer {
    	private String[] encryptPropNames = { "jdbc.username", "jdbc.password" };
    	@Override
    	protected void processProperties(
    			ConfigurableListableBeanFactory beanFactoryToProcess,
    			Properties props) throws BeansException {
    		DesUtils des;
    		try {
    			//加解密
    			des = new DesUtils("222");
    			for (String encryptName : encryptPropNames) {
    				String name = props.getProperty(encryptName);
    				if (null != name) {
    					// 将加密的username和password解密后塞到props
    					props.setProperty(encryptName, des.decrypt(name));
    				}
    			}
    			super.processProperties(beanFactoryToProcess, props);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    }
    
    展开全文
  • 二、实现思路我们都知道项目启动时,Spring 容器会加载配置文件并读取文件中的内容,那么我们可以下边步骤操作:1) 通过 DES 算法加密连接数据库的账号和密码并将加密后的密文写到 db 配置文件中。2) 在 Spring 读取...

    一、前言

    在很多项目中,数据库相关的配置文件内容都是以明文的形式展示的,这存在一定的安全隐患。

    在开发和维护项目时,不仅要关注项目的性能,同时也要注重其安全性。

    二、实现思路

    我们都知道项目启动时,Spring 容器会加载配置文件并读取文件中的内容,那么我们可以下边步骤操作:

    1) 通过 DES 算法加密连接数据库的账号和密码并将加密后的密文写到 db 配置文件中。

    2) 在 Spring 读取 db 配置文件时将密文解密回明文。

    三、实现编码

    3.1 加密工具类

    DESUtil 类:

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
        
    public class DESUtil {
    private static Key key;
    private static String KEY_STR = "myKey";
    private static String CHARSETNAME = "UTF-8";
    private static String ALGORITHM = "DES";
    static {
    try {
    KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
    SecureRandom secureRandom = SecureRandom.getInstance( "SHA1PRNG");
    secureRandom.setSeed(KEY_STR.getBytes());
    generator.init(secureRandom);
    key = generator.generateKey();
    generator = null;
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    /**
    * 加密
    * @param str
    * @return
    */
    public static String getEncryptString(String str) {
    BASE64Encoder base64encoder = new BASE64Encoder();
    try {
    byte[] bytes = str.getBytes(CHARSETNAME);
    Cipher cipher = Cipher.getInstance(ALGORITHM);
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] doFinal = cipher.doFinal(bytes);
    return base64encoder.encode(doFinal);
    } catch (Exception e) {
    // TODO: handle exception
    throw new RuntimeException(e);
    }
    }
    /**
    * 解密
    * @param str
    * @return
    */
    public static String getDecryptString(String str) {
    BASE64Decoder base64decoder = new BASE64Decoder();
    try {
    byte[] bytes = base64decoder.decodeBuffer(str);
    Cipher cipher = Cipher.getInstance(ALGORITHM);
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] doFinal = cipher.doFinal(bytes);
    return new String(doFinal, CHARSETNAME);
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    }

    通过上边的工具类对连接数据库的账号密码进行加密。笔者主机上连接数据库的账号和密码分别是 “root” 和 “tiger”。

    经过加密后得到 “WnplV/ietfQ=” 和 “xyHEykQVHqA=” 。

    db.properties 配置文件完整内容如下:

    
        
    1
    2
    3
    4
    
        
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC
    jdbc.username=WnplV/ietfQ=
    jdbc.password=xyHEykQVHqA=

    3.2 配置文件解析类

    EncryptPropertyPlaceholderConfigurer 类:

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
        
    public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
    // 需要解密的字段
    private String[] encryptPropNames = { "jdbc.username", "jdbc.password" };
    @Override
    protected String convertProperty(String propertyName, String propertyValue) {
    if (isEncryptProp(propertyName)) {
    // 解密
    String decryptValue = DESUtil.getDecryptString(propertyValue);
    return decryptValue;
    } else {
    return propertyValue;
    }
    }
    private boolean isEncryptProp(String propertyName) {
    for (String encryptpropertyName : encryptPropNames) {
    if (encryptpropertyName.equals(propertyName))
    return true;
    }
    return false;
    }
    }

    3.3 Spring 配置文件

    applicationContext-mybatis.xml 部分内容:

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
        
    <!-- <context:property-placeholder location="classpath:*.properties"/> -->
    <bean class="com.light.ac.common.configuration.EncryptPropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:db.properties </value>
    </list>
    </property>
    <property name="fileEncoding" value="UTF-8"/>
    </bean>

    未加密明文前,使用的是 <context:property-placeholder /> 加载 db 配置文件。

    加密明文后,使用配置文件解析类加载 db 配置文件。

    完成上述 3 个步骤后按照往常操作,直接运行项目即可。

    四、总结

    起初,在不了解实现思路前觉得这功能很神秘和高大尚。但是,理清思路后功能实现起来就非常简单了。

    作为程序员不能被神秘的表象惊叹而“望而却步”,需要学会思考和理清思路,这样才能不断提升自身能力。

    展开全文
  • 首先配置文件中 <!-- 加密时候使用 --> <bean id="propertyConfig" class="sunwin.yog.dao.DecodePropertyConfigurer"> <property name="locations"> <list> &l...
  • 数据库配置文件进行加密存储方案,对数据库配置文件进行加密存储方案,对数据库配置文件进行加密存储方案,对数据库配置文件进行加密存储方案,对数据库配置文件进行加密存储方案
  • 本文主要介绍直接在配置文件中加密数据库用户名,密码. 再创建数据库链接的时候 解密.步骤如下 1:得到用户名和 密码 加密后的字符串. 有以下方法: 第一种: java -cp druid-1.0.19.jar ...
  • mybatis入门-数据库配置密码加密连接

    千次阅读 2018-05-12 21:10:36
    常见个人开发基本都是直接使用明文密码配置数据库连接。但在一些重要数据存在时,在大数据横行时期,数据就相当重要了,比如银行,若是,用明文密码给爬到,那么造成数据泄露是很严重的。 因此,在这提供俩个密码...
  • SpringBoot生产环境对数据库连接加密(jasypt) 一、Pom文件导入jasypt <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</...
  • 1.将数据库信息放入配置文件jdbc.properties中。 2.以引入的方式将数据库信息引入项目中,此处使用SSM框架,因此在Spring-dao.xml文件中引用。 注意:其中com.zy.utils.EncryptPropertyPlaceholderConfigurer会...
  • 数据库连接用户名和密码加密

    千次阅读 2019-06-16 09:54:47
    我们在开发应用时,需要连接数据库,一般把数据库信息放在一个属性配置文件中,比如jdbc.properties,具体的内容 #mysql的配置文件 jdbc.url=jdbc:mysql://127.0.0.1:3306/test jdbc.username=root jdbc.password=...
  • 这只是一个非常简单的例子,只是告诉我们一个解决数据库用户名和密码加密的一个渠道,比如,我们可以在PropertyPlaceholderConfigurer子类中写一些比较复杂的逻辑,比如根据jdbc.properties中配置的文件中进行各种...
  • Druid的数据库连接配置。 &lt;!-- 基于Druid数据库连接池的数据源配置 --&gt; &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="...
  • 数据库连接配置文件一般都是使用明文,这会带来数据库泄露的安全问题。例如jdbc.properties配置文件中,数据库连接地址、用户名、密码都是明文,如何使配置文件中的数据库连接信息避免明文显示是本文重点内容,即...
  • 应运维的要求,项目在生产环境中时,配置文件...由于使用的druid数据库连接池,它自带对密码的加密功能,以下是使用过程。 使用druid-1.1.6.jar包中的ConfigTools工具类对您的数据库密码进行加密! 命令如下: java ...
  • import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto....import java.security.Key; import java.security.SecureRandom; public class ...
  •   SpringBoot项目经常将连接数据库的密码明文放在配置文件里,安全性就比较低一些,尤其在一些企业对安全性要求很高,因此我们就考虑如何对密码进行加密。   jasypt 是一个简单易用的加解密Java库,可以快速集成...
  • nacos连接数据库密码加密

    千次阅读 2020-10-22 09:43:03
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ...但是在nacos原生版本中,nacos持久化连接mysql数据库是通过配置文件读取数据库的ip、port、user及password的. 这其实是一种不安
  • 加密: 语法: java -cp 你的druid包全路径 com.alibaba.druid.filter.config.ConfigTools 你要加密的密码 实例: password:加密后的编码字符串 pub...
  • SpringBoot MyBatis-Plus 数据库连接加密

    千次阅读 2019-04-04 17:11:17
    在项目中添加依赖 <dependency> <groupId>mysql</groupId>...mysql-connector-java</artifactId> <scope>runtime</scope> </dependency><!--MySq...
  • 重写连接池的setPassword()方法. 写密文解析成明文. [code="java"] public synchronized void setPassword(String password) { super.setPassword(Crypto.decrypt(password)); } [/code] ...
  • 一般的jdbc的配置是这样的: jdbc.username=root jdbc.password=123456 我们可以数据库的用户名和密码进行加密,这样就能大大增加系统的安全性 例如: encrypt.jdbc.username=uKXp9J7+X8lEB0KRJrK5oQ== encryp...
  • 加密方式连接数据库

    2020-06-01 11:43:50
    1:信息的加密可分为对称和非对称两种方式,前者表示加密后的信息可以解密成原值,而后者则不能根据加密后的信息还原为原值;MD5属于非对称加密,而DES属于对称加密; 定义DES加密解密工具类 package ...
  • 我在使用Springboot整合Quartz的时候使用了Druid数据源(Springboot整合Quartz集群部署以及配置Druid数据源),本案例就使用那个案例作为基础,其实数据库连接密码加密跟Quartz无关,只是我懒,只修改Druid部分。...
  • jar包版本:druid-1.0.15.jar ...java -cp druid-1.0.15.jar com.alibaba.druid.filter.config.ConfigTools 加密串 得到密文 2.用户名解密: package com.heli.core.user.common; import com.ali...
  • 数据库连接密码加密
  • 数据库连接des加密与解密

    千次阅读 2018-06-22 11:35:34
    1.des加 解密package bean.mjq.sys.jdbc;import java.security.Key; import java.security.Security; import java.util.Arrays;... /** * 使用DES算法对字符串进行加密的工具类。DES( Data Encryption ...
  • 使用ConfigFilter ... 为数据库密码提供加密功能 1 配置ConfigFilter 1.1 配置文件从本地文件系统中读取 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-m...
  • SpringBoot配置文件数据库密码加密

    千次阅读 2020-05-22 13:57:11
    需求:springboot的配置文件中,把连接数据库的密码加密,使之不是以明文存储 步骤 导入Maven坐标 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,220
精华内容 21,288
关键字:

java数据库连接配置加密

java 订阅