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

配置文件: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 map)

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

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

源文件如下:

/**

* 配置文件操作类

*

* @author leiruiheng

*

*/

public class PropertiesHander {

private static final Logger logger = Logger

.getLogger(PropertiesHander.class);

private static HashMap File_MAPPINGS = new HashMap();

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 map){

OutputStream out = null;

OutputStreamWriter outFileWriter = null;

BufferedWriter br = null;

try {

String s=PropertiesHander.class.getResource("/evoucher.conf").toString();

s=s.replace("file:","");

List 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 readConfig(String fileURL) {

List propCont = new ArrayList();

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 map=new HashMap();

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

mysql 密码文件改成密文_需求:实现数据库密码通过密文的方式存储在配置文件中 | 学步园...相关推荐

  1. mysql+视频文件转成流_视频文件自动转rtsp流

    最近碰到一个项目需要用到 rtsp 视频流做测试, 由于真实环境的 摄像头 并不能满足需求,故尝试了一下用本地视频文件转换成rtsp视频流做测试,记录一下~ 采用方案: Docker + EasyDa ...

  2. mysql语句创建临时表并存入数据_mysql创建临时表,将查询结果插入已有表中 | 学步园...

    今天遇到一个很棘手的问题,想临时存起来一部分数据,然后再读取.我记得学数据库理论课老师说可以创建临时表,不知道mysql有没有这样的功能呢?临时表在内存之中,读取速度应该比视图快一些.然后还需要将查询 ...

  3. mysql 密码文件改成密文_数据库密码弄成密文

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv

    详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...

  5. IO流批量改文件名字,把文件夹中类似于文件名,“我java_爱好者_最帅“改成“爱好者_最轻特工组合“

    批量改文件名字,把文件夹中类似于文件名,"我java_爱好者_最帅"改成"爱好者_最轻特工组合" [思路] 最完整的思路 得到所有的文件对象(把所有要改名字的文 ...

  6. 六、Git多人开发: 把同一文件改成了不同的文件名如何处理?

    @Author:Runsen 把同一文件改成了不同的文件名如何处理? 我们接着上面的话题,如果把同一文件改成了不同的文件名,如何处理? 小A和小B首先对使用git pull命令同步下.小Auser.h ...

  7. Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式

    一.概述 1.目标:读取properties文件改成单例模式 二.代码 1.Test.java 1 class WakenUpEvent{ 2 3 private long time; 4 priva ...

  8. bat文件改成sh文件在linux上运行java程序

    最近公司迁移服务器,从windows系统改为linux系统,里面有一些老程序是直接用bat文件启动的. 在linux中需要启动.sh文件才行,所以需要将bat文件改成sh文件才行 先粘出bat文件和s ...

  9. win10怎么将txt转换为html,win10怎么把txt格式改成bat_win10系统txt文件改成bat操作方法-win7之家...

    在win10系统中,有着我们所熟悉的一些文件格式,当然同意存在着一些用户很少见到也不知道作用的文件,同时这些文件大多数也是可以进行转换,近日有些用户就想要将txt格式改成bat,那么win10怎么把t ...

最新文章

  1. 酷讯出来的张一鸣为什么做了新闻不是旅游?
  2. 计算机的桌面教案,《认识计算机桌面》教案-20210608141312.pdf-原创力文档
  3. vue-router 去掉#
  4. linux之用 grep -r 关键字 快速搜索在目录下面的含有关键字的文件
  5. Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架
  6. pku 1149 PIGS(最大流)
  7. 简明Python3教程 1.翻译
  8. come的喂abc是什么梗
  9. input/output is not in graph tf.layers.conv2d在name命名时会自动在其后添加Conv2D
  10. 详解torch.view()的-1参数是什么意思
  11. p0f - 被动探测操作系统工具
  12. 机智云自助开发平台,低代码快速开发新系统
  13. 微软官方原版win7(64位/32位)旗舰版系统下载【适合所有品牌】
  14. MMU简单处理TLB例外
  15. 网络编程基础 --> 网络通信机理、报文与协议、套接字通信预备
  16. 项目管理(项目管理中的重要角色项目经理)
  17. 2023年申请发明专利的重要性和注意问题。
  18. 深度学习框架DeepLearning4J(DL4J)的安装及配置
  19. java学生类 方法 输出_高额悬赏,java面向对象编程,编写学生类,输出学生相关信息...
  20. “骑驴找马”被上司发现了,怎么办?

热门文章

  1. 自动化专业出路-前景-就业方向
  2. powerdesigner 使用excel 批量导入创建表
  3. haha, 愚人节听鱼人歌
  4. [Python设计模式] 第23章 烤串的哲学——命令模式
  5. 戴尔笔记本重装系统win7,一键重装系统教程
  6. 如何创建一个高颜值、高性能的可视化仪表盘,DevExpress Dashboard v20.1这些功能可以了解一下!
  7. MySQL 主键自增 Auto Increment用法
  8. 色调映射 (Tonemapping)
  9. Unity3D棋盘游戏实战入门——2D智力拼图-伍晓波-专题视频课程
  10. 老闪创业那些事儿(外传)——码农异事录