博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSM配置文件信息加密实现
阅读量:4048 次
发布时间:2019-05-25

本文共 2859 字,大约阅读时间需要 9 分钟。

  在web项目中数据库连接时的账号密码都直接写在配置文件中,直接被暴露出来,造成一定的安全隐患,所以在这里使用DES算法对密码进行加密,实现代码如下:

1、配置密码加密工具类:DESUtil

public class DESUtil {	     private static Key key;    //设置密钥    private static String KEY_STR = "shepikey";    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 (NoSuchAlgorithmException e) {            e.printStackTrace();        }    }     //加密    public static String getEncryptString(String str){        BASE64Encoder encoder = 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 encoder.encode(doFinal);        } catch (Exception e) {            e.printStackTrace();//            throw ...        }        return null;    }     //解密    public static String getDecryptString(String str){        BASE64Decoder decoder = new BASE64Decoder();        try {            byte[] bytes = decoder.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) {            e.printStackTrace();            //throw ...        }        return null;    }}

2、

编写继承PropertyPlaceholderConfigurer 的加密处理工具

将需要加密的项先利用上面的加密算法手动加密后写入到配置文件中,之后将加密过的值的键写入到下面这个数组中,

也就是告诉程序那些配置文件中的值是需要解密的。

public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {    private String[] encryptProppNames = {"jdbc.username","jdbc.password","redis.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 : encryptProppNames ){            if( encryptpropertyName.equalsIgnoreCase(propertyName) ){                return true;            }        }        return false;    }    }

3、修改xml中导入配置文件的方式

修改为:

classpath:dbConfig/db.properties
classpath:dbConfig/redis.properties

 

转载地址:http://oofci.baihongyu.com/

你可能感兴趣的文章
leetcode1792第232场周赛第三题,以及二维数组根据某一列进行排序——优先队列
查看>>
学生网上选课管理系统的设计与实现—计算机类专业课程设计(毕业设计)
查看>>
新建动态web工程项目红叉报错,以及Could not publish server configuration for Tomcat v9.0 Server at localhost.
查看>>
机器学习SVM的车牌识别系统—计算机专业课程设计(毕业设计)
查看>>
leetcode 80. 删除有序数组中的重复项 II
查看>>
课程设计(毕业设计)—学生宿舍管理系统—计算机类专业
查看>>
毕业设计(课程设计)—SpringBoot网上订餐系统的设计与实现—计算机类专业课程设计(毕业设计)
查看>>
毕业设计(课程设计)—个人博客系统(微博)的设计与实现—计算机类专业课程设计(毕业设计)
查看>>
牛客(中兴捧月)—B-切绳子
查看>>
剑指Offer 13.机器人的运动范围——DFS和BFS
查看>>
Java中GUI编程总结—AWT中的Frame容器、panel面板、布局管理
查看>>
剑指offer12.矩阵中的路径—DFS+剪枝
查看>>
Java中GUI编程总结—事件监听、TextField监听、画笔、(鼠标、窗口、键盘)监听
查看>>
Java中GUI编程总结—Swing(窗口、面板、弹窗、标签、按钮、列表、文本框)
查看>>
Java中map容器分别根据键key和值value进行排序的总结
查看>>
剑指offer面试题16. 数值的整数次方——快速幂
查看>>
剑指 Offer 39. 数组中出现次数超过一半的数字——摩尔投票法
查看>>
python中SQLite3 数据库语句使用总结——增删改查
查看>>
Java网络编程总结
查看>>
leetcode 477. 汉明距离总和——超出时间限制
查看>>