需求:实现数据库密码通过密文的方式存储在配置文件中

需求:实现数据库密码通过密文的方式存储在配置文件中


配置文件:evoucher.conf【可以是任意自定义格式结尾的配置文件】格式 是以  Key:Value存在的。

例如如下:

#  evoucher.database 数据库配置
#####################################################################################################
# 'ORACLE'ORACLE数据库;'POSTGRES'postgreSql数据库;'DB2'DB2数据库;'SYBASE'sybase数据库;'UPDB'upRight数据库;'KB'kingBase数据库
evoucher.model.DataBaseService=ORACLE
#设置数据库用户名
evoucher.database.user=assp_pbc_1231
#设置数据库密码
evoucher.database.password=1
#设置数据库ip
evoucher.database.ip=192.168.1.241
#设置数据库端口
evoucher.database.port=1521
#数据库实例名oracle是实例名、postgres是数据库名
evoucher.database.databasename=orcl
##################oracle数据库URL配置 (当使用oracle数据库时,配置了URL则优先使用根据url配置的数据库,其他数据库无需配置)
##################如 jdbc:oracle:thin:@127.0.0.1:1521:orcl
evoucher.oracle.url=

#####################################################################################################
# evoucher.service.sign  签名服务配置 

配置文件操作类:PropertiesHander.java  

里面几个重要的方法:

    saveNewPro:更新新的配置  更新配置
*   1.将更改后的配置文件保存在新的properties内2.初始化参数 将更改后的参数进行初始化3.更新缓存内的内容

    getEVConfValue(String key)

    setEVConfValue(HashMap<String,String> map)

    Properties getProByCustomPath(String customPath,String fileName) {        //获取自定义包路径的配置文件

    List<String> readConfig(String fileURL)                        //读取配置文件  保留里面的注释信息

源文件如下:

/**
 * 配置文件操作类
 * 
 * @author leiruiheng
 * 
 */
public class PropertiesHander {

	private static final Logger logger = Logger
			.getLogger(PropertiesHander.class);
	private static HashMap<String, String> File_MAPPINGS = new HashMap<String, String>();

	private static  Properties evoucherConfPro = PropertiesHander
			.getProByCustomPath("/", BIZConstant.FILE_NAME_EVOUCHER_CONF);
	
	static {
		// 注册类字段与配置字段的映射关系
		File_MAPPINGS.put("M_SIGN_SERVICE", "evoucher.model.SignService");
		File_MAPPINGS.put("M_MESSAGE_SERVICE", "evoucher.model.MessageService");
		File_MAPPINGS.put("M_ESTAMP_SERVICE", "evoucher.model.EStampService");
		File_MAPPINGS.put("M_DATABASE_SERVICE",
				"evoucher.model.DataBaseService");
		File_MAPPINGS.put("M_CALL_BACK_PARAMETER",
				"evoucher.service.callback.address");
		File_MAPPINGS.put("M_REQUEST_NOTIFY", "evoucher.service.requestData.address"); 
		File_MAPPINGS.put("M_CALL_BACK_THREAD_COUNT", "evoucher.service.callback.thread.count");
		
		File_MAPPINGS.put("S_SIGN_SERVICE", "evoucher.switch.SignService");
		File_MAPPINGS
				.put("S_MESSAGE_SERVICE", "evoucher.switch.MessageService");
		File_MAPPINGS.put("S_ESTAMP_SERVICE", "evoucher.switch.EStampService");
		File_MAPPINGS.put("S_ESTAMP_ALLSIGN", "evoucher.switch.EStampAllSign");
		File_MAPPINGS.put("S_ESTAMP_FUND", "evoucher.switch.EStampFund");
		File_MAPPINGS.put("S_RECEIVE_VIERFY", "evoucher.switch.ReceiveVerfy");
		File_MAPPINGS.put("S_READ_IS_RETURN", "evoucher.switch.IsReturn");
		File_MAPPINGS.put("S_CHECK_IS", "evoucher.switch.VoucherFieldCheck");
		File_MAPPINGS.put("S_CALL_BACK_FUNCTION",
				"evoucher.switch.CallBackFuction");
		File_MAPPINGS.put("S_ERROR_MSG_MODEL_FLAG", "evoucher.switch.ErrMsgModeFlag");
		
		File_MAPPINGS.put("S_RECEIVE_MSG_REQUESTDATA_FLAG", "evoucher.switch.requestData");
		File_MAPPINGS.put("S_RECEIVE_MSG_SENDDATA_FLAG", "evoucher.switch.sendData");
		File_MAPPINGS.put("S_RECEIVE_MSG_SENDDATA_CALLBACK_FLAG", "evoucher.switch.sendData.CallBackFuncton");
		File_MAPPINGS.put("S_AUTHENTICATEDUSERS", "evoucher.switch.AuthenticatedUsers");
		File_MAPPINGS.put("S_TIMElOG_TEST", "evoucher.switch.TimeLog");	
		/** 凭证库服务版本号 */
		File_MAPPINGS.put("EVOUCHER_SERVICE_VERSION", "evoucher.service.version");
		//原文篡改编码
		File_MAPPINGS.put("M_EVOUCHER_VERFIY_SIGN_CODE", "evoucher.verfiySignStamp.code");
		//IP白名单控制
		File_MAPPINGS.put("M_EVOUCHER_IP_WHITELIST_SERVER", "evoucher.ip.whiteList.server");
		File_MAPPINGS.put("M_EVOUCHER_IP_WHITELIST_OCX", "evoucher.ip.whiteList.ocx");
		File_MAPPINGS.put("S_CHECK_VOUCHERXMLFORXFIELD", "evoucher.switch.checkVoucherXmlForXField");
		
		File_MAPPINGS.put("M_READ_VOUCHER_COUNT", "evoucher.service.read.voucher.count");
		//校验内部凭证不能修改非空字段开关
		File_MAPPINGS.put("S_CHECK_CANMODIFYNONEMPTYFIELDS","evoucher.switch.canModifyNonemptyFields");
		
		//自动升级数据库开关
		File_MAPPINGS.put("S_AUTO_UPDATEDB","evoucher.switch.autoUpdateDB");
	}
	  /**
	   * 将更改后的参数保存在新的properties文件内
	   * @return  null
	   * */
	  public static  void saveNewPro(){
		  
		   String fileUrl = PropertiesHander.class.getResource("/evoucher.conf").toString();
		   fileUrl = fileUrl.replace("file:","");
		    
			try {
				//InputStream is1=PropertiesHander.class.getClassLoader().getResourceAsStream("evoucher.conf");
				InputStream is = new FileInputStream(new File(fileUrl));
				evoucherConfPro.clear();
				evoucherConfPro.load(is);
				
			} catch (IOException e) {
				logger.error("文件加载异常", e);
			}

      }

	
		public static String getEVConfValue(String key) {
			if(File_MAPPINGS.containsKey(key))
				key=File_MAPPINGS.get(key);
			return evoucherConfPro.getProperty(key);
		}
	
	
	public static void setEVConfValue(HashMap<String,String> map){
		OutputStream out = null;
		OutputStreamWriter outFileWriter = null;
		BufferedWriter br = null;
		try {
			String s=PropertiesHander.class.getResource("/evoucher.conf").toString();
			s=s.replace("file:","");
			List<String> list = PropertiesHander.readConfig(s);
			out = new FileOutputStream(s);
			outFileWriter = new OutputStreamWriter(out, "utf-8");  
			br = new BufferedWriter(outFileWriter);
			
			for(String str : list){
				if(str.contains("=")){
					String[] array = str.split("=");
					if(map.containsKey(array[0])){
						str = array[0] + "=" + map.get(array[0]).trim();
					}
				}
				br.write(str);
				br.newLine();
			}
		} catch (Exception e) {
			logger.error(e);
		} finally{
			try {
				if(br != null){
					br.close();
				}
				if(outFileWriter != null){
					outFileWriter.close();
				}
				if(out != null){
					out.close();
				}
			} catch (IOException e) {
				logger.error(e);
			}
		}
		
	}

	/**
	 * 获取自定义包路径的配置文件
	 * 
	 * @param customPath
	 *            自定义路径
	 * @param fileName
	 *            文件名
	 * @return
	 */
	public static Properties getProByCustomPath(String customPath,
			String fileName) {
		InputStream in = null;
		Properties prop = new Properties();
		try {
			in = PropertiesHander.class.getResourceAsStream(customPath
					+ fileName);
			prop.load(in);
		} catch (Exception e) {
			throw new EVoucherException(ExceptionConstant.EVS601 + "获取文件["
					+ fileName + "]失败", e);
		} finally {
			if (in != null)
				try {
					in.close();
				} catch (IOException e) {
					logger.warn("关闭流失败", e);
				}
		}
		return prop;
	}
	
	/**
	 * 读取配置文件  保留里面的注释信息
	 * @param fileURL
	 * @author LY 2014-9-23 
	 */
	private static List<String> readConfig(String fileURL) {
		List<String> propCont = new ArrayList<String>();
		FileInputStream fis = null;
		InputStreamReader isr = null;
		BufferedReader bufferedreader = null;
		try {
			fis = new FileInputStream(fileURL);
			isr = new InputStreamReader(fis, "utf-8");
			bufferedreader = new BufferedReader(isr);
			String temp = "";
			while ((temp = bufferedreader.readLine()) != null) {
				propCont.add(temp);
			}
		} catch (Exception e) {
			logger.error(e);
		} finally{
			try {
				if(bufferedreader != null){
					bufferedreader.close();
				}
				if(isr != null){
					isr.close();
				}
				if(fis != null){
					fis.close();
				}
			} catch (IOException e) {
				logger.error(e);
			}
		}
		return propCont;
	}
	
}


在类加载获取密码过程中:

//对数据库的密码进行加密处理
String pass=dealPassword(password);

方法体如下:

	/**
	 * 处理密码  dealPassword  如果是明文  则加密  返回原密码
	 * 如果是密文  直接解密  返回解密后密码
	 * */
	//对获取的密码进行解密
	@SuppressWarnings("unchecked")
	public String  dealPassword(String password){
		
	    Des desObj=new Des();
	    
        String key1 = "lyn";
        String key2 = "lyn";
        String key3 = "lyn";
        HashMap<String, String> map=new HashMap<String,String>();
		
		if(password.length()<32){
			//将字符串的密码长度增加至32位
			String s="0000_"+password;
			//对原文进行加密
			String passWord = desObj.strEnc(s, key1, key2, key3);
			//将加密后的参数传给配置文件更改配置文件中的信息 读取配置文件的信息
			Properties evoucherPro = new Properties();
			InputStream is=PropertiesHander.class.getClassLoader().getResourceAsStream("evoucher.conf");
			try {
				evoucherPro.load(is);
			} catch (IOException e) {
				// TODO Auto-generated catch block
		        logger.error("对密码加密时加载配置文件异常", e);
			}
			//将配置新的密码更新到配置文件中
			evoucherPro.setProperty("evoucher.database.password", passWord);
			//更新配置文件
			Enumeration   enmObject =  evoucherPro.keys();
            //对每一个主键信息进行检索处理,跟传入的返回值信息是否有相同的地方(如果有相同的地方,取出主键信息的属性,传回给返回信息)
            while(enmObject.hasMoreElements()){
                String Key = (String)enmObject.nextElement();
                String Value = evoucherPro.getProperty(Key);
              
                map.put(Key, Value);
            }
			PropertiesHander.setEVConfValue(map);
		   
			return password;
		}
		//解密
		String  newPassword1=desObj.strDec(password, key1, key2, key3);
		String   newPassword=newPassword1.substring(5);
		return  newPassword;
	}

这里面用到了DES加密算法:

DES设计到Java版本和.js版本。参考资料如下源代码:http://download.csdn.net/detail/itjavawfc/8375329

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值