重写 EncryptablePropertyDetector bean 并实现 isEncrypted 和 unwrapEncryptedValue 方法
私有静态类 MyEncryptablePropertyDetector 实现 EncryptablePropertyDetector {@Overridepublic boolean isEncrypted(String value) {if (value != null) {return value.startsWith("ENC@");}return false;}@Overridepublic String unwrapEncryptedValue(String value) {return value.substring("ENC@".length());}
}@Bean(名称 = "encryptablePropertyDetector")
公共 EncryptablePropertyDetector encryptablePropertyDetector() {返回新的 MyEncryptablePropertyDetector();
}
重写 EncryptablePropertyResolver ,实现 resolvePropertyValue 方法。
类 MyEncryptablePropertyResolver 实现 EncryptablePropertyResolver {私有最终 PooledPBEStringEncryptor 加密器;public MyEncryptablePropertyResolver(char[] 密码) {this.cryptor = new PooledPBEStringEncryptor();SimpleStringPBEConfig config = new SimpleStringPBEConfig();config.setPasswordCharArray(password);config.setAlgorithm( "PBEWITHHMACSHA512ANDAES_256");config.setKeyObtentionIterations("1000");config.setPoolSize(1);config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName(" org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");encryptor.setConfig(config);}@Overridepublic StringresolvePropertyValue(String value) {if (value != null && value.startsWith("ENC@ ")) {return encryptor.decrypt(value.substring("ENC@".length()));}返回值;}
}@Bean(名称=“cryptablePropertyResolver”)EncryptablePropertyResolver encryptablePropertyResolver(@Value("${jasypt.encryptor.password}") 字符串密码) {return new MyEncryptablePropertyResolver(password.toCharArray());
}
https://www.gsm-guard.net/ulisesbocchio/jasypt-spring-boot