org.jasypt.exceptions.EncryptionOperationNotPossibleException Jasypt и Hibernate, работающие как служба Windows
Приложение Hibernate (без весенней загрузки) использует Jasypt-1.9.3 для расшифровки пароля базы данных из файла свойств. И он отлично работает как банка. Однако, когда файл jar запускается как служба Windows с использованием prunsrv.exe (Commons Daemon Service Runner), он дает
org.jasypt.exceptions.EncryptionOperationNotPossibleException
(опять же, когда пароль БД не зашифрован, запуск jar в качестве службы Windows работает без проблем). Я прикрепил фрагмент кода, в котором происходит расшифровка. Используемая соль объявлена как переменная env't.
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. Что можно проверить?
заранее спасибо
1 ответ
Решил вопрос. Я упустил из виду очень простой шаг. Когда служба Windows запускается с помощью prunsrv.exe, существует файл .bat, который устанавливает банку как службу. Поскольку я добавил новые функции в Java-приложение, включая шифрование / дешифрование файла свойств, мне нужно было переустановить банку как службу, например, просто остановить и запустить ее из служб Windows. Таким образом, повторный запуск файла .bat решил мою проблему.