У меня возникли проблемы с шифрованием пароля базы данных в hibernate.cfg.xml
Это мой файл свойств.
<!-- Database connection settings -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=TEST;</property>
<property name="connection.username">sa</property>
<!-- Encryption -->
<property name="connection.password">ENC(vMO/j5jfpaU2cUhPVoOk5Q==)</property>
<property name="connection.provider_class">org.jasypt.hibernate4.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property>
<property name="connection.encryptor_registered_name">hibernateEncryptor</property>
Затем в HiberanteUtil.java
у меня есть это
// Builds session factory.
private static SessionFactory configureSessionFactory()
throws HibernateException {
Configuration configuration = new Configuration().configure();
StandardPBEStringEncryptor encryptor =
new StandardPBEStringEncryptor();
encryptor.setPassword("pass");
HibernatePBEEncryptorRegistry registry =
HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor("hibernateEncryptor", encryptor);
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties()).buildServiceRegistry();
return configuration.buildSessionFactory(serviceRegistry);
}
Я создал зашифрованный пароль с помощью encrypt.bat
.
Тогда ошибка у меня есть
com.microsoft.sqlserver.jdbc.SQLServerException: Ошибка входа для пользователя 'sa'. ClientConnectionId:8033573f-5f52-4fe9-a728-fbe4f57d89c4
Если я удалю эту часть
StandardPBEStringEncryptor encryptor =
new StandardPBEStringEncryptor();
encryptor.setPassword("someKey");
HibernatePBEEncryptorRegistry registry =
HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor(
"hibernateEncryptor", encryptor);
У меня такая же ошибка, поэтому я думаю, что она не регистрируется, но я понятия не имею, как это сделать.
Я так шифрую
ОБНОВЛЕНИЕ
Единственное, что я могу сделать, чтобы заставить его работать, это что-то вроде этого, но это не так, как я думаю.
StandardPBEStringEncryptor encryptor =
new StandardPBEStringEncryptor();
encryptor.setPassword("somePass");
encryptor.setAlgorithm("PBEWITHMD5ANDDES");
String pass=encryptor.decrypt("HhpmA/XmJoLro8TYYu4YyA==");
HibernatePBEEncryptorRegistry registry =
HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor(
"hibernateEncryptor", encryptor);
Configuration configuration = new Configuration().configure()
.setProperty("hibernate.connection.encryptor_registered_name","hibernateEncryptor")
.setProperty("hibernate.connection.password",pass);
Итак, я думаю, что проблема с "hibernateEncryptor"
, я думаю, мне нужно зарегистрироваться
<typedef name="encryptedString" class="org.jasypt.hibernate4.type.EncryptedStringType">
<param name="encryptorRegisteredName">hibernateEncryptor</param>
<typedef>
Но когда я помещаю его в hibernate.cfg.xml
, он говорит о недопустимом сопоставлении, поэтому я добавляю его в класс с аннотацией, но ничего не происходит, потому что я думаю, что это читается после подключения к базе данных, и это то, что я хочу зашифровать. :(
@TypeDef(name="encryptedString",typeClass=org.jasypt.hibernate4.type.EncryptedStringType.class,
parameters= {@Parameter(name="encryptorRegisteredName",value="hibernateEncryptor")})
hibernate-4.1
иjasypt 1.9.1
jasypt-hibernate4-1.91
- person nachokk   schedule 09.09.2013