springboot 整合 jasypt 实现账号密码加密

大家好呀,我是小羊,今天是儿童节哦,先祝大家儿童节快乐,谁还不是个宝宝呢😁,如果大家喜欢我的文章的话,就关注我一起学习进步吧~

前言

最近在做安全这块,之前我们在 springboot 项目中使用 mysql redis 的时候,都是直接把账号密码写在 application.properties 配置文件中,后面使用apollo 配置管理中心后,账号密码就直接配置在apollo 上 大概就是这样的

springboot 整合 jasypt 实现账号密码加密
springboot 整合 jasypt 实现账号密码加密

如果是个人项目,一般来讲是没什么问题,但是如果是公司项目,这样就不太安全了,只要拥有项目权限,就可以直接连数据库,对于数据来讲,不太安全,我们综合考虑了一下,结合现有技术,决定使用 jasypt 来对账号密码进行加密,从而提高项目数据的安全性。jasypt配置大概就是下面这样子的:

spring.datasource.druid.username= ENC(l4xyBtNCrB5BamCxMrxfbQ==)
spring.datasource.druid.password= ENC(V7Iy0muP9BXMY0WwKkR3Qg==)

spring.redis.password= ENC(V7Iy0muP9BXMY0WwKkR3Qg==)
# jasypt 密钥
jasypt.encryptor.password=123456

我们可以大概知道 jasypt 的功能是加密解密,那么 jasypt 是怎么做的的呢?

简介

jasypt 主要利用到了 spring 的  BeanFactoryPostProcessor,修改了 Order属性来实现的。

具体可以参考一下这篇博客 https://blog.csdn.net/runlion_123/article/details/107056608

maven 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yangzheng</groupId>
    <artifactId>springboot-jasypt</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-jasypt</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.44</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

jasypt-spring-boot-starter 我这边还是推荐 2.x 版本的,现在最新版 3.x 好像有点问题,我集成的时候一直报错,启动不了

项目配置

jasypt.encryptor.password=123456

spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
#spring.datasource.druid.username=root
#spring.datasource.druid.password=123456
spring.datasource.druid.username= ENC(l4xyBtNCrB5BamCxMrxfbQ==)
spring.datasource.druid.password= ENC(V7Iy0muP9BXMY0WwKkR3Qg==)
spring.datasource.druid.max-active=20
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.max-wait=60000
spring.datasource.druid.validation-query=select 1
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000

mybatis.type-aliases-package=com.yangzheng.shardingsphere.entity
mybatis.mapper-locations = classpath:mapper/**/*.xml


spring.redis.host=localhost
spring.redis.port= 6379
#spring.redis.password= 123456
spring.redis.password= ENC(V7Iy0muP9BXMY0WwKkR3Qg==)
spring.redis.timeout= 10000ms
spring.redis.lettuce.pool.max-active= 8
spring.redis.lettuce.pool.max-wait= -1ms
spring.redis.lettuce.pool.max-idle= 8
spring.redis.lettuce.pool.min-idle= 0
spring.redis.lettuce.pool.database= 0

最关键的配置 是 jasypt的密钥,以及加密后的账号密码,jasypt会根据 ENC(密文) 进行解析,最终得到明文

加密工具类

package com.yangzheng.utils;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;

/**
 * @author yangzheng
 * @description
 * @date 2022/6/1 00115:54
 */

public class EncryptConfigUtil {

    public static void main(String[] args) {

        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        //加密所需的salt
        textEncryptor.setPassword("123456");
        //要加密的数据(数据库的用户名或密码)
        String username = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("123456");
        System.out.println("username:"+username);
        System.out.println("password:"+password);

    }
}

密钥可以换成更复杂一点的,我这边测试就使用了 123456。

总结:

「jasypt优点」

  1. 配置简单,集成快
  2. 侵入性较小
  3. 速度比较快

「jasypt缺点」

  1. 密钥需要存放在配置文件或者 jvm 启动命令中,如果被人知道了加解密算法和密钥,还是比较容易破解的。

源码

「github」 https://github.com/yangzheng0/springboot-jasypt「gitee」  https://gitee.com/yangzheng1/springboot-jasypt (gitee 开源需要审核,需要等2天)

好啦,今天的分享就到这里啦。

喜欢我的话,可以给我点个赞呀。


原文始发于微信公众号(小羊架构):springboot 整合 jasypt 实现账号密码加密

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/259735.html

(0)
Java朝阳的头像Java朝阳

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!