未从 AttributeConverter 中的 属性 获取值
Not getting value from property inside AttributeConverter
我创建了一个转换器,想从 属性 文件中获取 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 beans 之前加载。有什么办法可以解决这个问题吗?
谢谢。
转换器不受 Spring 管理。
添加@Component注解使其成为Spring Bean:
@Component
@Converter
public class CryptoConverter implements AttributeConverter<String, String> {
我用@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);
}
现在我可以从 属性 文件中获取值了。
我创建了一个转换器,想从 属性 文件中获取 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 beans 之前加载。有什么办法可以解决这个问题吗?
谢谢。
转换器不受 Spring 管理。
添加@Component注解使其成为Spring Bean:
@Component
@Converter
public class CryptoConverter implements AttributeConverter<String, String> {
我用@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);
}
现在我可以从 属性 文件中获取值了。