`
szlxh002
  • 浏览: 34461 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring使用Properties文件

 
阅读更多

1.Properties文件的内容

dbName=sampledb
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/${dbName}
#userName=root
#password=1234
userName=WnplV/ietfQ=
password=gJQ9O+q34qk\=

 2.Spring配置 

 

<?xml version="1.0" encoding="UTF-8" ?>
<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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<!--1.使用传统的PropertyPlaceholderConfigurer引用属性文件  -->
	<!--
		bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
		p:fileEncoding="utf-8"> <property name="locations"> <list>
		<value>classpath:com/baobaotao/placeholder/jdbc.properties</value>
		</list> </property> </bean
	-->
	
	<!--2.使用context命名空间的配置引用属性文件  -->
	<!--context:property-placeholder
		location="classpath:com/baobaotao/placeholder/jdbc.properties" file-encoding="utf8"/>
	<bean id="utf8" class="java.lang.String">
		<constructor-arg value="utf-8"></constructor-arg>
	</bean-->

	<!--3.使用加密版的属性文件  -->
	<bean class="com.baobaotao.placeholder.EncryptPropertyPlaceholderConfigurer"
	    p:location="classpath:com/baobaotao/placeholder/jdbc.properties"
		p:fileEncoding="utf-8"/>

    <context:component-scan base-package="com.baobaotao.placeholder"/>

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close" p:driverClassName="${driverClassName}" p:url="${url}"
		p:username="${userName}" p:password="${password}" />
</beans>

 3.加密的java Class文件EncryptPropertyPlaceholderConfigurer.java

 

 

package com.baobaotao.placeholder;

import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {	
	private String[] encryptPropNames ={"userName","password"};
	
	@Override
	protected String convertProperty(String propertyName, String propertyValue) {		
		if(isEncryptProp(propertyName)){
			String decryptValue = DESUtils.getDecryptString(propertyValue);
			System.out.println(decryptValue);
			return decryptValue;
		}else{
			return propertyValue;
		}
	}
	
	/**
	 * 判断是否是加密的属性
	 * @param propertyName
	 * @return
	 */
	private boolean isEncryptProp(String propertyName){
		for(String encryptPropName:encryptPropNames){
			if(encryptPropName.equals(propertyName)){
				return true;
			}
		}
		return false;
	}
}

 

 

使用到的加密工具DESUtils.java

package com.baobaotao.placeholder;

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DESUtils {
	private static Key key;
	private static String KEY_STR = "myKey";
	static {
		try {
			KeyGenerator generator = KeyGenerator.getInstance("DES");
			generator.init(new SecureRandom(KEY_STR.getBytes()));
			key = generator.generateKey();
			generator = null;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 对str进行DES加密
	 * 
	 * @param str
	 * @return
	 */
	public static String getEncryptString(String str) {
		BASE64Encoder base64en = new BASE64Encoder();
		try {
			byte[] strBytes = str.getBytes("UTF8");
			Cipher cipher = Cipher.getInstance("DES");
			cipher.init(Cipher.ENCRYPT_MODE, key);
			byte[] encryptStrBytes = cipher.doFinal(strBytes);
			return base64en.encode(encryptStrBytes);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 对str进行DES解密
	 * 
	 * @param str
	 * @return
	 */
	public static String getDecryptString(String str) {
		BASE64Decoder base64De = new BASE64Decoder();
		try {
			byte[] strBytes = base64De.decodeBuffer(str);
			Cipher cipher = Cipher.getInstance("DES");
			cipher.init(Cipher.DECRYPT_MODE, key);
			byte[] decryptStrBytes = cipher.doFinal(strBytes);
			return new String(decryptStrBytes, "UTF8");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

	}

	public static void main(String[] args) throws Exception {
//		if (args == null || args.length < 1) {
//			System.out.println("请输入要加密的字符,用空格分隔.");
//		} else {
//			for (String arg : args) {
//				System.out.println(arg + ":" + getEncryptString(arg));
//			}
//		}
		
		System.out.println(getDecryptString("WnplV/ietfQ="));
		System.out.println(getDecryptString("gJQ9O+q34qk="));
	}
}

 

 

4.在基于注解的java类中使用属性

package com.baobaotao.placeholder;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;

@Component
public class MyDataSource {
    @Value("${driverClassName}")
	private String driverClassName;
    
    @Value("${url}")
	private String url;
    
    @Value("${userName}")
	private String userName;
    
    @Value("${password}")
	private String password;
    
    public String toString(){
    	 return ToStringBuilder.reflectionToString(this);
    }	
}

 

 

 

分享到:
评论

相关推荐

    spring读取properties

    在Spring框架中,读取和使用Properties文件是一种常见的配置方式,尤其当涉及到数据库连接、环境变量等需要在运行时动态加载或更改的信息时。本文将深入解析如何在Spring环境中读取Properties文件,包括配置步骤、...

    Spring 读取properties文件key+value方式.rar

    Spring框架提供了强大的属性配置管理,能够帮助开发者轻松地读取和使用properties文件中的key-value对。本教程将深入探讨如何在Spring中以不同的方式读取properties文件,以便更好地理解和应用这些配置。 首先,...

    读取properties文件返回map

    1. **properties文件结构** `properties`文件的结构非常简单,每行代表一个键值对,键和值之间用等号`=`或冒号`:`分隔。例如: ``` username=admin password=123456 database.url=jdbc:mysql://localhost:3306/...

    Spring Boot Properties 全部配置文件,中文注释

    SpringBoot2.x properties全部配置文件总计1500+,每个配置文件写有中文解释。适用于系统学习springboot 深入学习springboot的同学。

    Spring3.0 配置文件中加载Properties文件的小例子

    本篇将详细讲解如何在Spring 3.0的配置文件中加载Properties文件,以便在运行时动态获取和使用这些配置。 首先,我们需要一个Properties文件,例如`application.properties`,它通常放在项目的类路径根目录下。这个...

    spring4.0引用properties

    本实例将深入探讨如何在Spring 4.0中引用和使用properties文件。 首先,我们需要创建一个properties文件。例如,我们有一个名为`application.properties`的文件,通常放在项目的`src/main/resources`目录下。这个...

    Spring 自定义注解注入properties文件的值jar包

    Spring 自定义注解注入properties文件的值jar包,下面为使用方法 在xml配置文件中,这样加载properties文件 ...

    sftp直接以url模式读取-----------包括servlet如何借用springproperties取文件

    总之,这个主题涉及了Java中使用SFTP协议读取远程文件的技术,以及如何结合SpringProperties和Servlet来管理和访问这些配置。了解和掌握这些知识点,对于开发需要处理远程文件系统的Java应用是至关重要的。

    详解spring boot 使用application.properties 进行外部配置

    Spring Boot 框架提供了多种方式来进行外部配置,今天我们将详细讲解使用 application.properties 文件来进行外部配置的方法。application.properties 文件是 Spring Boot 中的一个默认配置文件,用于存储可以手动...

    Spring中jdbc.properties属性文件进行密文处理

    这是一个简单的案例用来实现Spring中jdbc.properties属性文件进行密文处理,代码中的学生实体自己根据需要在数据库中进行创建

    SPRING:bean配置properties

    `PropertyPlaceholderConfigurer`允许我们在Spring的配置文件中引用外部的properties文件,以实现配置信息的灵活管理和动态加载。以下是一个基本的配置示例: ```xml class="org.springframework.beans.factory....

    JAVA 解决Properties文件保存中文乱码

    首先,我们需要理解Java默认使用ISO-8859-1编码来处理Properties文件。由于此编码不支持大部分中文字符,因此在保存或加载包含中文的Properties文件时,必须指定正确的字符编码,通常是UTF-8。 ### 1. 保存中文到...

    谈谈Spring 注入properties文件总结

    除了XML配置,Spring还支持使用注解的方式来注入properties文件。这通常涉及到`@Value`注解和`@ConfigurationProperties`注解。 1. 使用`@Value`注解: ```java @Component public class AppConfig { @Value("$...

    spring中properties加密

    本文将深入探讨如何在Spring项目中实现properties文件的加密。 1. **理解Properties文件** Spring框架广泛使用`properties`文件来存储配置信息。这些文件通常是纯文本格式,容易被读取,从而增加了安全性风险。...

    spring无法读取properties文件数据问题详解

    Spring 无法读取 properties 文件数据问题详解 Spring 框架在读取 properties 文件数据时可能会遇到一些问题,本文将对这些问题进行详细的解释和解决。 问题一:Controller 中无法读取 properties 文件数据 在 ...

    SSM 读取properties文件

    "SSM 读取properties文件"这个话题聚焦于如何在项目中有效地读取和使用这些配置文件。properties文件通常用于存储应用程序的配置参数,如数据库连接信息、服务器端口、邮件服务设置等,使得这些关键信息能够独立于...

    Spring用代码来读取properties文件实例解析

    在Spring应用程序中,我们可以使用@Value注解来读取Properties文件中的值,但是这需要我们每次使用时都声明一个局部变量。今天,我们将探讨如何使用代码来读取Properties文件,并将其封装成一个工具类,以便于在...

    spring使用属性文件

    本文将深入探讨如何在Spring中使用属性文件,并结合给出的博文链接进行详细讲解。 1. **属性文件介绍** 属性文件通常以`.properties`为扩展名,例如`application.properties`或`db.properties`。这些文件包含键值...

    Struts 2 properties文件详解

    ### Struts 2 properties文件详解 #### 概述 `struts.properties` 文件是Struts 2框架中的核心配置文件之一,它包含了Struts 2框架运行时所需的一系列配置属性。这些属性决定了Struts 2的行为特征以及与其他组件如...

Global site tag (gtag.js) - Google Analytics