当前位置: 首页 > news >正文

网站镜像 动态兰州做网站公司有哪些

网站镜像 动态,兰州做网站公司有哪些,建设银行宁波分行 招聘网站,企业网站建设的必要性及维护Spring Boot配置加密实践 使用Java技术栈的时候,Spring Boot几乎已经成为了标配。Spring Boot帮助我们简化了各种技术的整合,我们只需要在application.yml配置文件中增加一点点的配置即可。 虽然Spring Boot简化了我们的工作,但是也隐藏了底…

Spring Boot配置加密实践

使用Java技术栈的时候,Spring Boot几乎已经成为了标配。Spring Boot帮助我们简化了各种技术的整合,我们只需要在application.yml配置文件中增加一点点的配置即可。

虽然Spring Boot简化了我们的工作,但是也隐藏了底层的整合实现。

现在有一个问题,我们的数据库密码、Redis密码、ES密码等等都设置在application.yml中,那岂不是有安全风险。能不能对这些敏感字段进行加密?

答案当然是可以的。

那么就开始这个文档的主题,加密Spring Boot配置中的敏感数据。

提前预告,内容过于简单,请不要太开心。

配置加密初体验

今天介绍的配置加密,使用了这个包jasypt-spring-boot-starter,废话不多说,开始整合。

  1. 这里假设你是使用Maven构建的项目(使用Gradle的话,自己对应变更就好了),在pom.xml文件中加入jasypt-spring-boot-starter的依赖。

             <!-- 属性加密工具 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></dependency>
    
  2. 在pom.xml中加入对应的插件。

                    <!-- 配置加密插件 --><plugin><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-maven-plugin</artifactId><version>3.0.4</version></plugin>
    
  3. 在你的启动参数中,加入如下参数jasypt.encryptor.password

    java -jar xxx.jar -Djasypt.encryptor.password="test"
    

    记住jasypt.encryptor.password表示的就是你的加密的密码,这个是必须要设置的。现在示例密码是test

    其实除了设置到启动参数中,也可以设置到application.yml中,虽然这样是不推荐的,毕竟这样的话,你的加密后的密码跟加密密码就放到一起了,容易被解密。

    jasypt:encryptor:password: test
    

现在加密使用的工具就整合结束了,是不是很简单。

使用配置加密

整合配置加密的工具后,如果你的配置中没有设置加密的密码,是不会影响使用的。

那要如何开启密码加密呢。

第一步 对密码进行加密

这就要使用到我们刚才设置的插件jasypt-maven-plugin

使用如下命令,即可对密码进行加密。

mvn jasypt:encrypt-value -Djasypt.encryptor.password="test" -Djasypt.plugin.value="xxx"

-Djasypt.encryptor.password我们之前也已经介绍了,表示的是加密的密码。

-Djasypt.plugin.value表示的是我要进行加密的内容,例如数据库的密码。

在命令行中执行之后,就得到了加密后的密码,如下图所示。

image-20230728112815211

我们得到的加密后的密码就是ENC(Zdy/wU1qeh9OHHtWGgQkZBxJ7ArACrdrkBrW9gVGltYenncnUzHi6WtRJuR9VS3y)

第二步 替换密码

我们需要使用第一步得到的加密密码来替换我们的原始密码。对应到配置上应该就是:

spring:datasource:password: ENC(Zdy/wU1qeh9OHHtWGgQkZBxJ7ArACrdrkBrW9gVGltYenncnUzHi6WtRJuR9VS3y)

好了,结束了,现在你就可以启动你的系统了,是不是发现,加密后的密码竟然也可以启动你的系统。

现在你的系统中任何系统属性、环境属性、命令行参数、application.properties、application-*.properties 、yaml属性和任何其他属性源都可以包含加密属性。

特殊的加密整合

虽然使用jasypt-spring-boot-starter来进行配置加密已经很简单了,但是奈何现实情况是多种多样的,总有可能出现问题。下面讲解下我遇到的各种问题,以及解决办法。

配置关键字被占用

通过之前的了解,我们也知道了,在配置中,加密后的敏感数据是这样的形式的:ENC(xxx)

xxx是加密后的内容,ENC()是帮助jasypt-spring-boot-starter识别那些是加密的数据,需要解密的。

但是,不是只有jasypt-spring-boot-starter会进行加密解密的,其他的工具也可能会有加密解密功能,也可能会使用ENC()作为识别加密属性的关键字。

假如跟其他的工具使用相同的关键字,那到底是谁来解密呢,解密的工具不对,那解密就会失败的呀。

很不巧,dynamic-datasource-spring-boot-starter就是这样的工具。

这个工具用来支持多数据源,也是很常见的一种工具。通过查看文档,发现他也是使用ENC作为加密字段的关键字。

image-20230728114131978

博主在使用过程中,发现了密码被dynamic-datasource-spring-boot-starter率先解密,导致解密失败。

如何解决?

那就给jasypt-spring-boot-starter换一个识别加密字段的关键字就好了。如下配置所示:

jasypt:encryptor:property:prefix: ENCRYPT(suffix: )

现在识别加密密码的关键字已经换成了ENCRYPT(),这个换成你喜欢的就行。

那么我现在的密码,应该是:

spring:datasource:password: ENCRYPT(Zdy/wU1qeh9OHHtWGgQkZBxJ7ArACrdrkBrW9gVGltYenncnUzHi6WtRJuR9VS3y)

Redisson配置没有加解密

在实践过程中,还发现了Redisson配置没有加解密成功。配置所下所示:

spring:redis:redisson:config: |sentinelServersConfig:password: ENCRYPT(Zdy/wU1qeh9OHHtWGgQkZBxJ7ArACrdrkBrW9gVGltYenncnUzHi6WtRJuR9VS3y)

这是因为jasypt-spring-boot-starter识别加密字段的逻辑是,以关键字ENC(开头,)结尾,中间的就是加密的内容。

我们查看上面的配置,发现了redisson的配置是一个多行文本,即不是一个以关键字ENC(开头,也不是)结尾。所以识别失败,不会进行解密。

通过断点查看类RedissonAutoConfiguration也发现了,redission的密码确实是没有加密的,依旧使用的是ENCRYPT(Zdy/wU1qeh9OHHtWGgQkZBxJ7ArACrdrkBrW9gVGltYenncnUzHi6WtRJuR9VS3y)

image-20230728115200993

不过,好在redission给我们提供了自定义配置的方式。源码中如下图表示:

image-20230728115250960

所以我们需要提供一个Bean,实现接口RedissonAutoConfigurationCustomizer,用于修改redisson的密码,使用spring.redis.password配置的密码即可。

/*** Redisson密码将使用spring.redis.password的密码,这是因为处理在Jasypt配置加密解密整合过程中,发现redisson的密码不被解析的问题。** @author wanggt* @date 2023-07-26 17:29:31*/
@Component
public class RedissonPasswordCustomizer implements RedissonAutoConfigurationCustomizer {@Autowiredprivate RedisProperties redisProperties;@Overridepublic void customize(Config configuration) {// spring.redis.password的密码是被解密过的,设置给redisson使用configuration.useSentinelServers().setPassword(redisProperties.getPassword());}
}

只需要设置spring.redis.password的密码为加密密码即可。

spring:redis:password: ENCRYPT(Zdy/wU1qeh9OHHtWGgQkZBxJ7ArACrdrkBrW9gVGltYenncnUzHi6WtRJuR9VS3y)

这样redisson的问题也解决了。

整合报错

Failed to bind properties under ‘spring.datasource.password’ to java.lang.String

部分人在整合之后,启动系统失败,出现了这样的报错。

出现这样的报错通常都是解密失败,需要排查:

  1. yaml文件格式是否正确,是否缺少了属性冒号后的空格

  2. 是否缺少了JCE的包。

    可以在命令行执行命令mvn jasypt:decrypt-value -Djasypt.encryptor.password="test" -Djasypt.plugin.value="xxx",查看是否可以解密。-Djasypt.plugin.value设置的是加密后的密码,如果出现下图提示,可能就是缺少的JCE。可以考虑更换JDK版本,如果是JDK8,需要是JDK8u161版本以上。

    image-20230728120056332

链接

加密工具Github

http://www.yayakq.cn/news/32539/

相关文章:

  • 如何新建自己的网站免费网站建设模板
  • 国家开放大学网站界面设计招聘网站怎么做吸引人
  • 手机版电子商务网站开发徐州网站备案
  • 个人网站如何提高访问量长沙做一个网站要多少钱
  • 有谁想做网站 优帮云合肥制作app的公司
  • 建立企业网站 优帮云wordpress aj提交评论
  • 行业网站设计百度举报网站
  • 网站优化怎么做ppt小程序商店怎么接入视频号
  • 东莞市手机网站建设哪家好西安市未央区建设局官方网站
  • 如何做收机微网站网页设计教程详细步骤
  • 做垂直网站wordpress 自动剪裁
  • 湘潭网站建设建站wordpress先生
  • 台州网站建设方案济宁做网站的公司
  • 呼市浩特网站建设外包公司1688阿里巴巴官网首页
  • 网站制作的核心技术怎么做网上网站
  • dw怎样建设网站免费站长工具
  • wordpress自动发布网站h5游戏网站入口
  • 有哪些企业可以做招聘的网站单页面网站可以做自适应网站吗
  • 东莞网络公司哪个网站好精湛的合肥网站建设
  • 深圳有没有什么网站电商网站的功能有哪些
  • 肇庆网站制作安徽建设工程信息网路灯项目
  • 长沙做网站竞网cms门户网站模板下载
  • 网站群建设的目的意义网站运营做seo
  • 做乡村旅游的网站私人为别人做网站违法问题
  • 淘宝官方网站登录页面怎样注册自己的网址
  • 马鞍山做网站的西部数码网站管理助手 2008
  • 创建网站要钱吗网站认证收费
  • 建筑行业招聘网站推荐开发公司房子出售怎么不交税
  • 怎么制定网站广州网站百度排名推广
  • 企业网站建设制作公司广告传媒公司名字大全