java - 我需要从 Java 的属性文件中读取 @salt_key@ 和 @Secret_key。即在Java代码中声明
问题描述
@Bean
@Scope("prototype")
protected SecretKeySpec secretkey() throws InvalidkeySpecException,
NoSuchAlgorithamException {
String secretKey = "Fra@d@15gt";
String salt = "Sa@t5dS3@";
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), 65536, 256);
SecretKey tmp = secretKeyFactory().generateSecret(spec);
SecretKeySpec secretKey1 = new SecretKeySpec(tmp.getEncoded(), "AES");
return secretKey1;
}
解决方案
首先将 secretKey 和 salt 存储在配置文件中,如下所示:
secretKey=Fra@d@15gt
salt=Sa@t5dS3@
然后在java代码中读取如下:
@Bean
@Scope("prototype")
protected SecretKeySpec secretkey(@Value("${secretKey}") final String secretKey,
@Value("${salt}") final String salt)
throws InvalidkeySpecException, NoSuchAlgorithamException {
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), 65536, 256);
SecretKey tmp = secretKeyFactory().generateSecret(spec);
SecretKeySpec secretKey1 = new SecretKeySpec(tmp.getEncoded(), "AES");
return secretKey1;
}
确保里面的字符串@Value
应该与你在配置文件中保存的完全匹配。对于不同的环境(如生产/QA/本地),会有不同的 secretKey 和 salt。对于每个环境,您可以使用特定于环境的值创建单独的文件。