woollay / bq-encryptor

1.支持国际上通用的加密算法:RSA(1024/2048)/AES(128/192/256)/3DES(DESede)/PGP/SHA-1/SHA-256/SHA-512/SHA-3/HmacSHA256/Hmac-SHA512/MD5;2.也支持国密算法:SM2/SM3/SM4/HmacSM3/HSM;3.抽象并融合了上述2套加密算法,希望对你有用
Apache License 2.0
5 stars 1 forks source link

hsm和jasypt初始化都ok,但是一旦增加security配置就无法加载自定义的jasypt #2

Closed sunxpin closed 1 year ago

sunxpin commented 1 year ago

现在出现另外一个问题,前2步:加密机EncryptHsmConfigurer和JasyptEncryptConfig都配置正确的情况下(不加EncryptSecurityConfigurer这个前提下我程序可以正常启动和访问), 一旦放开EncryptSecurityConfigurer并且在yml增加配置security的情况下,程序就启动报错了, 日志显示:c.u.j.encryptor.DefaultLazyEncryptor : String Encryptor custom Bean not found with name 'jasyptStringEncryptor'. Initializing Default String Encryptor,可以看到没有去找自定义的jasyptStringEncryptor 而是去初始化默认的,然后就报错了java.lang.IllegalStateException: either 'jasypt.encryptor.password'。我jasypt-spring-boot-starter 版本为3.0.4,换成2.1.2也不行。 image

sunxpin commented 1 year ago

我把EncryptSecurityConfigurer这个类注释掉,并且吧yml里的security配置都去掉,可以看到是可以正常初始化自定义的jasyptStringEncryptor这个Bean,但是一旦yml里加了ENC()的配置就去初始化默认的jasypt Bean了 `2023-06-28 11:22:59.920 INFO 10304 --- [ main] c.u.j.encryptor.DefaultLazyEncryptor : String Encryptor custom Bean not found with name 'jasyptStringEncryptor'. Initializing Default String Encryptor 2023-06-28 11:23:00.002 ERROR 10304 --- [ main] o.s.boot.SpringApplication : Application run failed

java.lang.IllegalStateException: either 'jasypt.encryptor.password', one of ['jasypt.encryptor.private-key-string', 'jasypt.encryptor.private-key-location'] for asymmetric encryption, or one of ['jasypt.encryptor.gcm-secret-key-string', 'jasypt.encryptor.gcm-secret-key-location', 'jasypt.encryptor.gcm-secret-key-password'] for AES/GCM encryption must be provided for Password-based or Asymmetric encryption ` 感觉像是jasypt-spring-boot-starter的原因

image

woollay commented 1 year ago

初步分析了下,有个可能的点: 你使用了bootstrap.yml配置和application.yaml配置,bootstrap.yml(先)和application.yaml(后)是有先后顺序关系的,原因出在你的jasypt Bean初始化jasyptStringEncryptor在ENC()之后加载的,所以会报这个错。 建议你统一使用application.yaml和application-xxx.yaml即可,不要两种混用,你可以参考下bq-service-auth: https://github.com/woollay/bq-service-auth这个服务的yaml配置文件;

建议你把工程的yaml配置文件和完整的代码结构发给我看下,你的秘钥和业务逻辑代码可以隐藏掉,我只要初始化的代码和配置。

初步分析了下,有个可能的点: 你使用了bootstrap.yml配置和application.yaml配置,bootstrap.yml(先)和application.yaml(后)是有先后顺序关系的,原因出在你的jasypt Bean初始化jasyptStringEncryptor在ENC()之后加载的,所以会报这个错。 建议你统一使用application.yaml和application-xxx.yaml即可,不要两种混用,你可以参考下bq-service-auth: https://github.com/woollay/bq-service-auth这个服务的yaml配置文件;

建议你把工程的yaml配置文件和完整的代码结构发给我看下,你的秘钥和业务逻辑代码可以隐藏掉,我只要初始化的代码和配置。

sunxpin commented 1 year ago

初步分析了下,有个可能的点: 你使用了bootstrap.yml配置和application.yaml配置,bootstrap.yml(先)和application.yaml(后)是有先后顺序关系的,原因出在你的jasypt Bean初始化jasyptStringEncryptor在ENC()之后加载的,所以会报这个错。 建议你统一使用application.yaml和application-xxx.yaml即可,不要两种混用,你可以参考下bq-service-auth: https://github.com/woollay/bq-service-auth这个服务的yaml配置文件; 建议你把工程的yaml配置文件和完整的代码结构发给我看下,你的秘钥和业务逻辑代码可以隐藏掉,我只要初始化的代码和配置。

初步分析了下,有个可能的点: 你使用了bootstrap.yml配置和application.yaml配置,bootstrap.yml(先)和application.yaml(后)是有先后顺序关系的,原因出在你的jasypt Bean初始化jasyptStringEncryptor在ENC()之后加载的,所以会报这个错。 建议你统一使用application.yaml和application-xxx.yaml即可,不要两种混用,你可以参考下bq-service-auth: https://github.com/woollay/bq-service-auth这个服务的yaml配置文件;

建议你把工程的yaml配置文件和完整的代码结构发给我看下,你的秘钥和业务逻辑代码可以隐藏掉,我只要初始化的代码和配置。

哎呀,还真是如老师所说,就是这个初始化顺序的关系,我把yml统一由bootstrap改成application.yaml命名后还真就好了,太感谢老师的解答了,老师的这几个项目我都在学习研究之中。

woollay commented 1 year ago

以后多交流。