无法从AttributeConverter内部的属性获取值

问题描述 投票:0回答:2

我创建了一个转换器,并希望从属性文件中获取secretKey

@Converter
public class CryptoConverter implements AttributeConverter<String, String> {

    private static final String ALGORITHM = "AES/ECB/PKCS5Padding";
    private byte[] secretKey;

    public CryptoConverter(@Value("${access_token_encryption_key}") String encryptionKey) {
        secretKey = encryptionKey.getBytes();
    }

    @Override
    public String convertToDatabaseColumn(String ccNumber) {
        // do some encryption
        Key key = new SecretKeySpec(secretKey, "AES");
        try {
            Cipher c = Cipher.getInstance(ALGORITHM);
            c.init(Cipher.ENCRYPT_MODE, key);
            return Base64.encodeBytes(c.doFinal(ccNumber.getBytes()));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public String convertToEntityAttribute(String dbData) {
        // do some decryption
        Key key = new SecretKeySpec(secretKey, "AES");
        try {
            Cipher c = Cipher.getInstance(ALGORITHM);
            c.init(Cipher.DECRYPT_MODE, key);
            return new String(c.doFinal(Base64.decode(dbData)));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

我在application.properties文件中添加了access_token_encryption_key密钥,但无法获得密钥access_token_encryption_key的值。

我认为此转换器在Spring bean之前加载。有什么想法可以解决吗?

谢谢。

java hibernate spring-boot converters
2个回答
1
投票

转换器不受Spring管理。

添加@Component批注使其成为Spring Bean:

@Component
@Converter
public class CryptoConverter implements AttributeConverter<String, String> {

0
投票

我通过@Component注释和@Autowired setter方法获得了解决方案,并将值分配给了静态变量。

private static byte[] accessTokenEncryptionKey;

    @Autowired
    public void setAccessTokenEncryptionKey(
            @Value("${tokyo_channel.access_token_encryption_key}") String accessTokenEncryptionKey) {
        CryptoConverter.accessTokenEncryptionKey = accessTokenEncryptionKey.getBytes(ISO_8859_1);
    }

现在我可以从属性文件中获取价值。

© www.soinside.com 2019 - 2024. All rights reserved.