Hibernate 应用程序(无 spring-boot)使用 Jasypt-1.9.3 从属性文件中解密数据库密码。它像罐子一样工作得很好。但是,当使用 prunsrv.exe(Commons Daemon Service Runner)将 jar 文件作为 Windows 服务运行时,它会给出org.jasypt.exceptions.EncryptionOperationNotPossibleException
(同样,当 DB 密码未加密时,将 jar 作为 Windows 服务运行没有问题)。我附上了解密发生的代码片段。使用的盐被声明为 env't variable JASYPT_ENCRYPTOR_PASSWORD
。
Properties properties = new Properties();
ResourceBundle options = Helper.getResourceFile(System.getProperty("user.dir") + "/system.properties");
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
String salt = System.getenv("JASYPT_ENCRYPTOR_PASSWORD");
String dbPassword = options.getString("db_password");
if (salt != null && dbPassword.startsWith("ENC(")) {
dbPassword = dbPassword.replace("ENC(", "");
dbPassword = dbPassword.substring(0, dbPassword.lastIndexOf(")"));
encryptor.setPassword(salt);
encryptor.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
encryptor.setIvGenerator(new RandomIvGenerator());
dbPassword = encryptor.decrypt(dbPassword);
}
properties.setProperty("hibernate.connection.username", options.getString("db_user"));
properties.setProperty("hibernate.connection.password", dbPassword);
properties.setProperty("hibernate.connection.url", "jdbc:jtds:sqlserver://" + options.getString("db_url") + ":" + options.getString("db_port") + "/" + options.getString("db_name") + ";characterEncoding=UTF-8;TDS=7.0");
return new AnnotationConfiguration().configure().mergeProperties(properties).buildSessionFactory();
我认为这与某种 Windows 服务配置/权限有关。有哪些可能的检查事项?
提前致谢