如果我们想要区分以 ENC@ 开头的字符,如何实现呢?
重写 EncryptablePropertyDetector 这个 bean ,实现 isEncrypted 和 unwrapEncryptedValue 方法
新的 bean 的名称设置为 encryptablePropertyDetector。
-
- private static class MyEncryptablePropertyDetector implements EncryptablePropertyDetector {
- @Override
- public boolean isEncrypted(String value) {
- if (value != null) {
- return value.startsWith("ENC@");
- }
- return false;
- }
-
- @Override
- public String unwrapEncryptedValue(String value) {
- return value.substring("ENC@".length());
- }
- }
-
-
- @Bean(name = "encryptablePropertyDetector")
- public EncryptablePropertyDetector encryptablePropertyDetector() {
- return new MyEncryptablePropertyDetector();
- }
如果我们不想使用 StringEncryptor 对 ENC@ 开头的属性进行解密?
重写 EncryptablePropertyResolver ,实现 resolvePropertyValue 方法。新的 bean 的名称设置为
encryptablePropertyResolver。
- class MyEncryptablePropertyResolver implements EncryptablePropertyResolver {
-
- private final PooledPBEStringEncryptor encryptor;
-
- public MyEncryptablePropertyResolver(char[] password) {
- this.encryptor = 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);
- }
-
- @Override
- public String resolvePropertyValue(String value) {
- if (value != null && value.startsWith("ENC@")) {
- return encryptor.decrypt(value.substring("ENC@".length()));
- }
- return value;
- }
- }
-
- @Bean(name="encryptablePropertyResolver")
- EncryptablePropertyResolver encryptablePropertyResolver(@Value("${jasypt.encryptor.password}") String password) {
- return new MyEncryptablePropertyResolver(password.toCharArray());
- }