本发明涉及计算机软件应用技术领域,具体涉及一种基于Spring的property文件的密码加密方法。
背景技术:
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
property文件是一个以.properties为后缀的文件,其作用是保存应用运行时的配置变量。对于一些密码类型的配置如果不进行加密,如数据库密码,可能会造成密码泄露等问题。现有技术中通常采用两次base64进行加密。
Spring本身提供PropertyPlaceholderConfigurer类读取property文件,其中该类中的convertProperty方法为将给定的property键转换为相应的值。
技术实现要素:
本发明要解决的技术问题是:本发明针对以上问题,为web项目的property文件加密,防止密码暴露在生产环境,提供一种基于Spring的property文件的密码加密方法,加密方法可自行定义,本发明的重点是提出一种简单有效的可统一密码加密的一个类,而不需其他地方修改。
本发明所采用的技术方案为:
一种基于Spring的property文件的密码加密方法,所述方法通过在Spring中新写一个类,继承spring的PropertyPlaceholderConfigurer类,并覆盖PropertyPlaceholderConfigurer类的convertProperty方法,然后将property文件注入到新写的类中,从而实现密码加密。
将property配置文件注入到新写的类的实现过程如下:在applicationContext.xml文件中,将property配置文件路径写明到新写的类的locations(位置)属性中。
所述applicationContext.xml是进行spring管理配置的xml文件。
所述方法实现流程如下:
1)继承spring原生的PropertyPlaceholderConfigurer类,进行重写;
2)重写convertProperty方法,按照property文件的加密属性名单中propertyName进行区分密码和非密码类型,进而对密码类型进行解密。
所述property文件是保存应用环境配置的内容为键值对的文件。
所述密码和非密码类型判断过程如下:
通过判断propertyName配置是否为password后缀,若是,返回true,若否,返回false。
所述方法通过在property文件中定义受环境影响易变的变量,可以随部署环境变化而进行相应修改。
易受环境影响的变量就是一些应用依赖的外部变量,比如数据库地址,数据库密码等,需要放置在配置文件中,而不能放在代码中,可以随部署环境进行修改。
本发明的有益效果为:
本发明方法适用Spring构建的web项目,避免密码泄露,能够通过简单有效的可统一密码加密的一个类,而不需其他地方修改。
附图说明
图1为本发明密码类型判断流程图。
具体实施方式
根据说明书附图,结合具体实施方式对本发明进一步说明:
实施例1:
一种基于Spring的property文件的密码加密方法,所述方法通过在Spring中新写一个类,继承spring的PropertyPlaceholderConfigurer类,并覆盖PropertyPlaceholderConfigurer类的convertProperty方法,然后将property文件注入到新写的类中,从而实现密码加密。
实施例2
在实施例1的基础,本实施例将property配置文件注入到新写的类的实现过程如下:在applicationContext.xml文件中,将property配置文件路径写明到新写的类的locations(位置)属性中。
实施例3
在实施例2的基础,本实施例所述applicationContext.xml是进行spring管理配置的xml文件。
实施例4
如图1所示,在实施例1、2或3的基础,本实施例所述方法实现流程如下:
1)继承spring原生的PropertyPlaceholderConfigurer类,进行重写;
2)重写convertProperty方法,按照property文件的加密属性名单中propertyName进行区分密码和非密码类型,进而对密码类型进行解密。
相关代码如下:
//继承spring原生的PropertyPlaceholderConfigurer类,进行重写
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
@Override
//重写convertProperty方法,按照propertyName进行区分密码和非密码类型,进而对密码类型进行解密
protected String convertProperty(String propertyName, String propertyValue) {
//判断配置是否为密码类型,若是进行解密,若否直接返回
if (isEncryptProp(propertyName)) {
//按照选定的加密方法进行密码解密
String decryptValue = CryptoUtils.getDecryptString(propertyValue);
return decryptValue;
} else {
return propertyValue;
}
}
实施例5
在实施例4的基础,本实施例所述property文件是保存应用环境配置的内容为键值对的文件。
实施例6
在实施例5的基础,本实施例所述密码和非密码类型判断过程如下:
通过判断propertyName配置是否为password后缀,若是,返回true,若否,返回false。
相关代码如下:
//判断配置是否为密码类型
private boolean isEncryptProp(String propertyName) {
//判断配置是否为password后缀,若是返回true,若否返回false
if (propertyName.endsWith("password")) {
return true;
}
return false;
}
}
实施例7
在实施例6的基础,本实施例所述方法通过在property文件中定义受环境影响易变的变量,可以随部署环境变化而进行相应修改。
易受环境影响的变量就是一些应用依赖的外部变量,比如数据库地址,数据库密码等,需要放置在配置文件中,而不能放在代码中,可以随部署环境进行修改。
property配置文件示例配置如下:
实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
</bean>
</property>
</list>
<value>classpath*:/application.properties</value>
<list>
<property name="locations">
<bean class="com.inspur.cloudframework.spring.beans.factory.config.EncryptPropertyPlaceholderConfigurer">
<-- 定义受环境影响易变的变量 -->