大家知道,SpringCloudConfig很早就提供了配置文件的加密和解密功能,支持对称加密和非对称加密两种不同的模式。Nacos作为分布式配置中心+服务注册中心的组合,在配置文件加密这块已经几乎没有意义了,不过好在如果你使用的Nacos版本大于2.0.4,现在也可以通过plug-ins配置文件是加密的。1、配置文件加密前面微服务视频中提到过SpringCloudConfig的对称加密和非对称加密,加密后的文件格式类似如下:name={cipher}ciphertextpassword={cipher}ciphertext可以看到,在SpringCloudConfig,配置文件的加密,针对字段逐一加密。Nacos中的加密是对整个配置文件的内容进行加密,这一点与SpringCloudConfig不同。在Nacos中,通过SPI机制将加解密操作抽象出来。Nacos默认提供了AES对称加密的实现,但用户也可以自定义加解密的实现。Nacos服务器在启动时会加载所有依赖的加解密算法,然后发布配置的dataId的前缀来匹配是否需要加解密和使用的加解密算法。客户端发布的配置会在客户端通过过滤器进行加解密,即配置在传输过程中是密文,而控制台发布的配置会在服务端进行处理。也就是说,在使用Nacos的配置文件加密插件后,我们在Nacos管理页面配置的配置文件会以加密后的密文形式存储在数据库中,同时也会以密文形式传输给客户端,并且然后在客户端自动完成解密操作。大致是这样的过程。接下来我们就来看看具体的用法。2.实践首先,我们需要下载nacos源码并编译。编译完成后,我们需要安装到本地Maven仓库(因为编译加密插件需要Nacos)。首先clonenacos源码,如下:gitclonehttps://github.com/alibaba/nacos.git下载后个人推荐使用IDEA编译,操作起来比较方便(因为还有其他操作跟随)。所以我们先用IDEA打开项目,确认项目需要的依赖已经下载好,然后点击安装按钮编译安装项目到本地仓库:接下来clone加解密插件配置文件如下:gitclonehttps://github.com/nacos-group/nacos-plugin.git同样用IDEA打开这个插件项目。这个插件编译需要用到我们刚才编译安装的Nacos,但是给的版本号不对,需要我们手动修改,位置在nacos-plugin/pom.xml,修改里面Nacos的版本号,从2.2.0-SNAPSHOT更改为2.2.0-BETA(我只是编译安装了这个版本,大家可以根据自己的实际情况选择):2.2.0-BETA执行install操作将所有插件安装到本地仓库:接下来回到最开始的Nacos项目,在Nacos项目中引入这个插件的依赖。建议在config模块中导入,如下图:导入内容如下:com.alibaba.nacosnacos-aes-encryption-plugin1.0.0-SNAPSHOT加入这个依赖后,我们的nacos就有了配置文件加密功能。现在我将修改console/src/main/resources/application.properties配置文件,让Nacos将数据存储到本地数据库中,如下:###CountofDB:db.num=1spring.sql.init.platform=mysql###连接DB的URL:db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=rootdb。password=123配置完成后,提前在本地准备一个名为nacos_config的数据库,先执行distribution/conf/mysql-schema.sql脚本文件创建需要的表。接下来,将启动参数添加到项目中。我们在单机上启动Nacos,而不是在集群上启动,如下图:在上图中,你关注两个地方,一个是启动类的位置,一个是启动参数。好了,现在我们可以像启动SpringBoot项目一样启动Nacos了。3.发布如果我们要打包发布项目,松哥建议大家先从GitHub下载官方压缩包。在官方压缩包中有一个target目录,该目录下有一个nacos-server.jar文件。是nacos的启动包。对于这个官方压缩包,你可以正常配置。然后,在IDEA中,重新打包我们刚刚处理的nacos,但是打包的时候记得要设置好环境,如下:环境设置好之后,再重新打包工程。打包完成后,会生成一个新的nacos-server.jar,如下:将官方压缩包中的jar替换成这个jar包,然后启动nacos。4、访问启动成功后,我们就可以直接访问nacos了。使用方法与通常的用法相同。不同的是,创建配置文件时,文件名有一个固定的前缀cipher-aes-。有了这个前缀,这个配置文件就会自动加密,否则不会加密。比如我现在创建如下配置文件:创建完成后,我们去数据库中查看配置文件:可以看到content字段已经是一个加密的字符串(如果没有加密,内容字段被保存Plaintextname=javaboy)。现在我们创建一个项目来加载这个加密的配置文件。在创建项目的时候选择NacosConfiguration,如下:创建之后记得手动添加刚才加密插件的依赖(解密的时候会用到)。记得将项目名称设置为cipher-aes-nacos:#应用名称spring.application.name=cipher-aes-nacos#应用服务WEB访问端口server.port=8080其他正常配置即可。好的,你完成了!Nacos配置文件加密实现~