首页 > 解决方案 > 如何停止 jasypt basictextencryptor 实体并在春季重新开始?

问题描述

我有一个应用程序有一些用户和用户条目,条目也有 userId 字段。当我保存一个条目时,我得到了相应用户的密钥,并想用用户密钥加密条目文本然后保存。

我将 jastpy basictextencyrptor 定义为 bean:

@Configuration
public class Encyrptor {
    @Bean
    public BasicTextEncryptor basicTextEncryptor() {
        return new BasicTextEncryptor();
    }
}

我将这个 bean 自动连接到我的服务类。这是我的服务代码:

public Entry saveEntry(Entry entry) {
        String key = userService.getUserKeyByUserId(entry.getUserId());
        entry.setText(encyptor(key, entry.getText()));
        return entryRepository.save(entry);
    }
private String encyptor(String key, String inputText) {
        basicTextEncryptor.setPassword(key);
        return basicTextEncryptor.encrypt(inputText);
    }

每当我想保存条目时,都会调用这些方法。但是,第一次尝试很好,而在第二次尝试中,我在线出错:

basicTextEncryptor.setPassword(key);

错误是:

org.jasypt.exceptions.AlreadyInitializedException: Encryption entity already initialized
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.setPassword(StandardPBEByteEncryptor.java:298)
    at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.setPassword(StandardPBEStringEncryptor.java:298)
    at org.jasypt.util.text.BasicTextEncryptor.setPassword(BasicTextEncryptor.java:79)

它说这个 encyrptor 已经初始化了,那么在使用它之后我该如何停止它呢?还是在方法中创建一个新的 BasicTextEncyrptor 实例来为每次尝试创建不同的实例而不是将其定义为 bean 更好?

标签: javaspringencryptionjavabeansjasypt

解决方案


推荐阅读