SpringMVC配置jasypt 加密配置文件

SpirngMVC配置jasypt

需要引入的依赖

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring31</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.2</version>
</dependency>

其中spring采用的版本是3.2.8.RELEASE

application.xml的配置

1.首先配置加密机

    <bean id="environmentVariablesConfiguration"
    	  class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    	<property name="algorithm" value="PBEWithMD5AndDES" />
    
    	<!-- 这种方式可以配置在windows的环境变量里面,需要在系统级别设置环境变量 -->
    	<!-- <property name="passwordEnvName" value=""/> -->
    
    	<!-- passwordSysPropertyName的值就是用 System.getProperties() 获取的属性值,比如:value="${user.home}" -->
    	<!-- <property name="passwordSysPropertyName" value=""/> -->
    
    	<!-- password和使用jasypt命令行工具时的password参数用法一致 -->
    	<property name="password" value="example"/>
    </bean>

如果想在配置文件中使用环境变量的话,比如把 example 注入到环境变量里

可以使用如下代码替换 example,需要在系统环境变量中加入 ENV_VARIABLE_NAME=example

   #{systemEnvironment['ENV_VARIABLE_NAME']}

例如:

  <property name="password" value="#{systemEnvironment['ENV_VARIABLE_NAME']}"/>

或者直接可以这样写

<property name="passwordEnvName" value="ENV_VARIABLE_NAME"/>

2.配置加密器

<!-- 配置加密器,将用于解密 -->
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
	<property name="config" ref="environmentVariablesConfiguration" />
</bean>

3.读取配置文件

<!-- 引入jdbc配置文件 -->
<bean id="propertyConfigurer" name="asda" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
	 <constructor-arg ref="configurationEncryptor" />
	 <property name="locations">
        <list>
           <value>classpath:properties/jdbc.properties</value>
            <!--要是有多个配置文件,只需在这里继续添加即可 -->
        </list>
    </property>
</bean>

注意: 此处读取配置文件的类是 EncryptablePropertyPlaceholderConfigurer 并不是 PropertyPlaceholderConfigurer

明文加密

加密方式有两种:

1.使用main()方法加密

public static void main(String[] args) {
	BasicTextEncryptor encryptor = new BasicTextEncryptor();
	encryptor.setPassword("example");
	String encrypted = encryptor.encrypt("root");//密码加密
	System.out.println(encrypted);
}

2.使用jar包加密

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=root password=example algorithm=PBEWithMD5AndDES

替换配置文件

将配置文件中的数据库账号和密码替换,加密后的密文需要使用 ENC() 包括

替换之前

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test
jdbc_username=root
jdbc_password=root

替换之后

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test
jdbc_username=ENC(juWRm++CX1ZMq3SlmgnVYQ==)
jdbc_password=ENC(juWRm++CX1ZMq3SlmgnVYQ==)

版权声明:本文为weixin_42962634原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。