0

我们使用 Spring 和 jasyptEncryptablePropertyPlaceholderConfigurer来读取 application.properties 文件。

如果某些属性值最后包含空格,有时会出现问题,在使用@Value(${})标签读取值时,我们最终也会得到尾随空格,这会产生问题。

现在该类EncryptablePropertyPlaceholderConfigurer是最终的,因此无法扩展,我进行了很多搜索以找出在修剪字符串值周围的空格后是否有任何方法来获取属性。

有人可以建议如何处理这种情况吗?

4

2 回答 2

1

您可以使用在构造函数中传递的自定义 StringEncryptor 创建 EncryptablePropertyPlaceholderConfigurer。在这个 CustomStringEncryptor.decrypt() 中做你的 trim()。(在这种情况下,您不知道要解密的是哪个属性)

您可以通过委托绕过 final:

class CustomStringEncryptor implements StringEncryptor{
  private StringEncryptor delegate;

  public CustomStringEncryptor(StandardPBEStringEncryptor delegate){
    this.delegate = delegate;
  }

  String decrypt(String encryptedMessage){
    String message = this.delegate.decrypt(encryptedMessage);
    if(null != message) message = message.trim();
    return message;
  }
}
于 2013-08-07T18:45:11.290 回答
0

所以我在“bellabax”的帮助下找到了我的问题的答案我覆盖了属性持久化器并实现了我自己的方法

propertyConfigurator.setPropertiesPersister(new MyDefaultPropertiesPersister());

    @Override
    public void load(Properties props, InputStream is) throws IOException {

    props.load(is);
    for (Entry<Object, Object> property : props.entrySet()) {
        property.setValue(property.getValue().toString().trim());
    }
}

现在我的属性被修剪掉了尾随空间,我希望这对某些人有所帮助。

于 2013-08-07T20:10:39.887 回答