项目集成jasypt加密配置文件

springboot集成jasypt

添加依赖

<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
	<version>${jasypt.version}</version>
</dependency>

注意:如果springboot版本是1.X,则jasypt版本不要超过2.0,否则项目启动报错。

配置加密密钥

在配置文件中配置加密密钥

jasypt:
  encryptor:
      password: 自定义的加密密钥

注意:该加密密钥可以通过 java -jar -Djasypt.encryptor.password=自定义的加密密钥进行设置,建议在生产环境中使用

编写测试类,获得加密后的数据


    @Autowired
    private StringEncryptor stringEncryptor;

    /**
     * 加密
     *
     * @param originPassword 原始密码
     * @return java.lang.String
     * @date 2021/10/15 23:28
     */
    private String encrypt(String originPassword) {
        return stringEncryptor.encrypt(originPassword);
    }


    /**
     * 解密
     *
     * @param encryptedPassword 加密密码
     * @return java.lang.String
     * @date 2021/10/15 23:39
     */
    private String decrypt(String encryptedPassword) {
        return stringEncryptor.decrypt(encryptedPassword);
    }


    @Test
    public void test01(){
        String username = "数据库账号";
        String password = "数据库密码";

        String encryptUsername = encrypt(username);
        String encryptPassword = encrypt(password);

        String decryptUsername = decrypt(encryptUsername);
        String decryptPassword = decrypt(encryptPassword);

        System.out.println("加密前==================");
        System.out.println(username);
        System.out.println(password);

        System.out.println("加密后==================");
        System.out.println(encryptUsername);
        System.out.println(encryptPassword);

        System.out.println("解密后==================");
        System.out.println(decryptUsername);
        System.out.println(decryptPassword);

    }

用加密后的数据替换配置文件中的内容

username: ENC(4VFVUM24U+l8cIBsqDB3n6aUl0Hyss/g)
password: ENC(tDCXAEl48I5nbXzpL+gLAg==)

注意:一定要用ENC()包裹,jasypt默认读取被ENC()包裹的内容进行解密。

到此,已经完成了配置文件的加密,可以尝试启动项目

SSM项目集成jasypt

添加依赖

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring31</artifactId>
    <version>${jasypt.version}</version>
</dependency>

修改配置文件,配置加密密钥

数据库等配置一般都是写在properties配置文件中,注释SSM框架中读取properties的bean配置

配置如下bean

<bean id="environmentStringPBEConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
	<!-- 该配置将加密密钥直接放在配置文件中 -->
    <property name="password" value="test"/>
    <!-- 该配置将加密密钥作为tomcat启动参数,项目启动时传入 -->
    <property name="passwordSysPropertyName" value="decryptKey"/>
    <!-- 该配置将加密密钥作为服务器环境变量传入,如果采用此配置,需要配置服务器的环境变量 -->
    <property name="passwordEnvName" value="decryptKey"/>
    <!-- 以上三种配置,选择一种即可 -->
</bean>

<!-- 加密解密对象的配置 -->
<bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
    <property name="config" ref="environmentStringPBEConfig"/>
</bean>

<!-- 注册读取properties文件的bean,代替原有的SSM框架读取properties文件的bean -->
<bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
    <constructor-arg ref="encryptor"/>
    <property name="location" value="classpath:dataSource.properties"/>
</bean>

编写测试类,获得加密后的数据

public static void fun01(String username, String password, String key){

        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword(key);

        String encryptUsername = encryptor.encrypt(username);
        String encryptPassword = encryptor.encrypt(password);

        String decryptUsername = encryptor.decrypt(encryptUsername);
        String decryptPassword = encryptor.decrypt(encryptPassword);

        System.out.println("加密前");
        System.out.println("username = " + username);
        System.out.println("password = " + password);

        System.out.println("加密后");
        System.out.println("username = " + encryptUsername);
        System.out.println("password = " + encryptPassword);

        System.out.println("解密后");
        System.out.println("username = " + decryptUsername);
        System.out.println("password = " + decryptPassword);

    }

用加密后的数据替换properties文件中的内容

username=ENC(AFnRM2Q/k6FwOwlpKGhKE2BN92XLpuLv)
password=ENC(TVZproHkE5THCUvK7Nx4Tg==)

注意:一定要用ENC()包裹,jasypt默认读取被ENC()包裹的内容进行解密。

到此,已经完成了配置文件的加密,可以尝试启动项目


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