2015-03-09 3 views
0

Я использую jasypt-1.9.2.jar в веб-приложении весны 4.1.1.Шифровать даты с помощью Jasyp: исключение пароля не установлено

У меня есть необходимость шифровать как даты, так и строки в базе данных.

Я ввожу глобальный пароль во время выполнения через веб-форму. Процесс хорошо работает для строк, но когда я пытаюсь читать/писать дату, я получаю исключение:

org.jasypt.exceptions.EncryptionInitializationException: Password not set for Password Based Encryptor 

мой пакет-info.class находится в том же пакете, участвующие в объектных компонентах:

/** 
* Declaring system wide encrypted DataBase columns 
*/ 
@TypeDefs({ 
    @TypeDef(
     name="encryptedString", 
     typeClass = EncryptedStringType.class, 
     parameters = { 
      @Parameter(name="encryptorRegisteredName", value="strongHibernateStringEncryptor") 
     } 
    ), 
    @TypeDef(
     name="encryptedDate", 
     typeClass = EncryptedDateAsStringType.class, 
     parameters = { 
      @Parameter(name="encryptorRegisteredName", value="strongHibernateStringEncryptor") 
     } 
    ) 
}) 

@FilterDefs({ 
    @FilterDef(name = "filterIgnoreCancelled", defaultCondition = "billing_status != :billing_status_param", parameters = { @ParamDef(name = "billing_status_param", type = "string") }) 
}) 

package com.synaptic.db.beans; 
import org.hibernate.annotations.FilterDef; 
import org.hibernate.annotations.FilterDefs; 
import org.hibernate.annotations.ParamDef; 
import org.hibernate.annotations.Parameter; 
import org.hibernate.annotations.TypeDef; 
import org.hibernate.annotations.TypeDefs; 
import org.jasypt.hibernate4.type.EncryptedDateAsStringType; 
import org.jasypt.hibernate4.type.EncryptedStringType; 

Я объявляю зашифрованное поле с аннотацией: @type (тип = "encryptedDate") или @type (тип = "encryptedString")

Любая идея о том, что я делаю не так? он отлично работает для строк, но я получаю исключение для дат.

ответ

0

После бесконечной отладки источник проблемы закончился инициализацией HibernatePBEStringEncryptor.

В моем коде я использовал эти строки, чтобы инициализировать шифратор:

весна-beans.xml

<bean id="hibernateStringEncryptor" class="org.jasypt.hibernate4.encryptor.HibernatePBEStringEncryptor"> 
    <property name="registeredName" value="strongHibernateStringEncryptor" /> 
    <!-- <property name="encryptor" ref="strongEncryptor" /> --> 
</bean> 

инициализации класса:

@Autowired 
public GlobalPasswordManagerImpl(HibernatePBEStringEncryptor hibernateStringEncryptor,... 
    this.strongEncryptor = createNewEncryptor(); 

    this.hibernateStringEncryptor = hibernateStringEncryptor; 
    this.hibernateStringEncryptor.setEncryptor(this.strongEncryptor); 

Но HibernatePBEStringEncryptor уже создает свою собственную StandardPBEStringEncryptor, поэтому я закончил переписывание существующего.

По каким-то причинам я не могу объяснить, что некоторые из моих сущностей оказались в исходном шифре вместо того, который я создал, и поскольку оригинал никогда не был правильно инициализирован, он генерирует исключения.

Правильный код, который фиксирует ошибку, является:

this.strongEncryptor = hibernateStringEncryptor.getEncryptor();