-
jasypt在springboot项目中遇到异常:Error creating bean with name 'enableEncryptablePropertySo
背景
在使用jasypt对spring boot的配置文件中的敏感信息进行加密处理时,使用stater直接启动时,遇到了一个异常
遇到如下异常:
以上的信息是指enableEncryptablePropertySourcesPostProcessor
创建时,由于创建其他类Bean失败而导致失败的。
先说一下这个问题是因为spring boot的BeanFactoryPostProcessor和自定义的@EnableJpaRepositories中的自定义repositoryFactoryBeanClass在启动创建时不兼容导致的,@Repository注解的bean提前被初始化了(创建enableEncryptablePropertySourcesPostProcessor时,因为spring boot的机制导致了一些类提前被实例化了,但是处理@Repository的BeanFactoryPostProcessor还没有加载进来)
如果不自定义@EnableJpaRepositories中的自定义repositoryFactoryBeanClass,就不会出现以上异常
解决方法
之后就想自己实现一下jasypt的方式,不过出现了还是需要jasypt的BeanFactoryPostProcessor实现方式,遂放弃,最后使用了重写PropertySource方式,加上反射完成自己来对已经读取的加密信息进行解密(在把bean放到容器之前,也就是@Value等注解生效之前)
1. 引入如下包,去掉jasypt的spring boot stater包
2. 定义@Configuration来注入PropertySource的bean
3. 因为jasypt每次生成的加密后的内容不一样,还跟项目有关,所以写了一个controller类做内容加密
-
项目启动起来之后,请求接口
/jasypt/encrypt?value=需要加密内容
,就可以得到密文了
如何使用
以上配置完成之后,就可以用jasypt那种配置文件和命令行的方式了
1. 配置文件中
这里写一个application.properties
然后命令行使用密码启动jar包
2. 命令行
以上遵循spring boot的覆盖优先级。
总结
因为这个不是jasypt的实现,只是模拟了默认情况下常用的配置文件和命令解密方式,所以jasypt的自定义内容并不能使用,有兴趣的可以自己实现一遍
__EOF__