最近利用闲暇时间写了一个博客系统,主要参考wordpress,主要目的是为了提高自己的技术能力。
写代码写了两年多,联系到之前在学校的时候写过的一个博客系统,发现工作中开发的系统,技术上基本一致,业务逻辑方面存在差异。
比如博客系统可能面对高并发的场景,比如某个时间段访问量,再比如博客系统为了最大程度吸引用户(换句话说,提高用户粘性),在界面上美观,使用上更加方便。通常界面美观伴随着前端js库的增多,特别是一些非常好看的画面或者图像是极其消耗带宽的,带宽如果不给力的话,页面半天打不开,同样也对于用户而言体验不好。

只想表达一个意思,软件开发万变不离其宗,本质上基本都是一个CMS系统(也许这句话武断了)。

话不多说,今天我要讲的关于SpringBoot加密。

SSM框架和SpringBoot中加密是不一样的,比如在SSM框架中可以使用Druid进行加密(主要对数据库密码或者是其它重要配置信息加密),但是在SpringBoot就不一定会适用。

关于Druid加密,可以参考我的博客园这篇文章:Druid加密

SpringBoot使用jasypt-spring-boot-starter加密,具体步骤如下:

一、导入Maven依赖(注意,我的springboot版本为1.5.9,建议最好版本别相差太多,否则会出现依赖冲突等问题)

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

二、编写测试类

package cn.test;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner; import com.blog.springboot.Application;
import com.blog.springboot.service.UsersService; import cn.hutool.core.util.RandomUtil;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class JunitTest { @Test
public void testEncrypt() throws Exception {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setAlgorithm("PBEWithMD5AndDES"); // 加密的算法,这个算法是默认的
config.setPassword("lyh"); // 加密的密钥
standardPBEStringEncryptor.setConfig(config);
//加密用户信息
String plainText = "youcong";
String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
//加密密码信息
String Enpassword = "youcong";
String EnpasswordText = standardPBEStringEncryptor.encrypt(Enpassword);
String db="wordpress";
String dbEnc = standardPBEStringEncryptor.encrypt(db);
//加密地址信息
String DBAUrl = "jdbc:mysql://localhost:3306/blog?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false";
String DBAUrlText = standardPBEStringEncryptor.encrypt(DBAUrl);
System.out.println("用户:"+encryptedText);
System.out.println("密码:"+EnpasswordText);
System.out.println("地址:"+DBAUrlText);
System.out.println("db:"+dbEnc);
} }

三、在springboot的配置文件添加如下配置(这里我以application.yml配置为例)

jasypt:
encryptor:
password: lyh

问:为什么要加这段?
答:这里的password对应的值lyh相当于密钥,主要用于解密。
你在单元测试中以什么作为加密,那么在yml中就以什么作为解密。

四、配置application.yml中的数据源

datasource:
url: ENC(cY3NmQF349TpBB0z0KavaiEPNDux/mKEss0UFeA11VTFC545rHh6t1rLC46GlX1b2rm8s5lzX49JmzFE4odcSiPafGZfQvnsHl2yVlLWM3kJg5DvVI4D0l5na3RUPTio4uz1gG9nML1u9ceHuj/yPb1097ZZfbCUsLSyRoeWvhhKuPxAM5mvGLZh641ArtVfRchNcdVZ1W4=)
username: ENC(BcbIdbvEq4yN8kezH5mDjg==)
password: ENC(Isk3pYM71258wxWTQOt3Dg==)
db-name: ENC(CZcfw3ZJN6TVCVxkCW9Ey6z6iAuszHO8)
filters: log4j,wall,mergeStat1

问:为什么要在数据源中添加ENC?
答:这个ENC相当于解密的标识符。

SpringBoot之加密的更多相关文章

  1. allator 对springBoot进行加密

    1.对springboot项目添加jar包和xml文件 allatori.xml: <config> <input> <jar in="target/sprin ...

  2. 使用Jasypt对SpringBoot配置文件加密(转)

    文章转自   https://www.jianshu.com/p/323ec96c46d2 引入jasypt <dependency> <groupId>com.github. ...

  3. SpringBoot中加密com.github.ulisesbocchio

    Jasypt Spring Boot 为 Spring Boot 项目中的属性源(property sources)提供加密支持. 有三种方法可以在项目中集成 jasypt-spring-boot: ...

  4. Springboot 如何加密,以及利用Swagger2构建Restful API

    先看一下使用Swagger2构建Restful API效果图 超级简单的,只需要在pom 中引用如下jar包 <dependency> <groupId>io.springfo ...

  5. 使用Jasypt对SpringBoot配置文件加密

    # **前言** 在日前安全形势越来越严重的情况下,让我意识到在项目中存在一个我们经常忽略的漏洞,那就是我们的项目的配置文件中配置信息的安全,尤其是数据库连接的用户名和密码的安全.所以这里我们就需要对 ...

  6. SpringBoot进阶教程(六十三)Jasypt配置文件加密

    数据库密码直接明文写在配置中,对安全来说,是一个很大的挑战.一旦密码泄漏,将会带来很大的安全隐患.尤其在一些企业对安全性要求很高,因此我们就考虑如何对密码进行加密.本文着重介绍Jasypt对Sprin ...

  7. jasypt-spring-boot

    运行 运行时配置解密秘钥-Djasypt.encryptor.password=在idea中运行 命令行启动和docker中运行参见https://www.cnblogs.com/zz0412/p/j ...

  8. 使用springboot完成密码的加密解密

    现今对于大多数公司来说,信息安全工作尤为重要,就像京东,阿里巴巴这样的大公司来说,信息安全是最为重要的一个话题,举个简单的例子: 就像这样的密码公开化,很容易造成一定的信息的泄露.所以今天我们要讲的就 ...

  9. SpringBoot使用Druid数据库加密链接完整方案

    网上的坑 springboot 使用 Druid 数据库加密链接方案,不建议采用网上的一篇文章<springboot 结合 Druid 加密数据库密码遇到的坑!>介绍的方式来进行加密链接实 ...

随机推荐

  1. canvas实现黑客帝国矩形阵

    在博客园看到了车大棒的写了一篇关于实现黑客帝国矩形阵,觉得canvas还是有一些奇妙的地方所在,故做个笔记记录一下. 实现的效果如下: 真的是一两行关键的代码添加就能实现意想不到的效果. 由于是can ...

  2. Nginx 部署多个 web 项目(虚拟主机)

    1,创建 www 目录 2,在 www 目录下创建 test1 和 test2 目录,表示两个项目 3,test1 下创建 test1.html 4,test2 下创建 test2.html 5,配置 ...

  3. 如何获取view的大小

    很多初学者都会犯一个错误 ,就是在onCreate或者onStart里面去获取view的大小,然而这样获取到的宽高通常都是0,为什么呢?因为view的测量过程和activity的生命周期不是同步的,因 ...

  4. 小技巧:在线生成按钮Shape的网站

    AndroidButton Make  右侧设置按钮的属性,可以即时看到效果,并即时生成对应的.xml 代码,非常高效(当然熟练的话 自己手写代码更快)

  5. Ubuntu添加新分区

    1.查看分区 ~$ sudo fdisk -l 2.添加分区 ~$ fdisk /dev/sda 3.输入m查看帮助 ~$ m 4.输入n新建分区,即添加分区 ~$ n 这里会出现设置分区大小 5.输 ...

  6. 转载:python生成以及打开json、csv和txt文件

    原文地址:https://blog.csdn.net/weixin_42555131/article/details/82012642 生成txt文件: mesg = "hello worl ...

  7. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

  8. 生成器(generator,yield),next,send

    #生成器 def generator(): for i in range(200): yield '哇哈哈%s' %i g = generator() #调用生成数函数,接受作用 ret = g.__ ...

  9. 软件工程:java实现wc项目基本功能

    项目相关要求 项目地址:https://github.com/xiawork/wcwork 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个 ...

  10. Redis常用命令【字符串】

    1.启动Redis客户端 进入src目录下,执行:redis-cli启动Redis客户端 2.help 帮助 帮助命令,用来查看redis命令的使用方式 3.set 设置 3.1设置 3.2不存在才设 ...