Jasypt与Hibernate 4和Spring 3.1的集成

3

我在我的应用程序中使用Spring 3.1+Hibernate 4.1,我希望一些字段(如密码)以加密形式存储,使用Jasypt。但是在集成过程中,我遇到了下面的异常:

java.lang.AbstractMethodError: org.jasypt.hibernate.type.EncryptedStringType.nullSafeSet(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V

为了将Spring+Hibernate与Jasypt集成,我按照以下步骤操作:

  1. 在lib文件夹中添加jasypt-1.8.jar

  2. dispatcher-servlet(配置文件)中添加以下内容:

    < bean id="hibernateStringEncryptor" class="org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor" lazy-init="false"> hibernateStringEncryptor jasypt < / bean>

  3. Entity中放置以下代码:

    @TypeDef( name="encryptedString", typeClass=EncryptedStringType.class, parameters= { @Parameter(name="encryptorRegisteredName", value="hibernateStringEncryptor") } )

但它没有获得预期的结果。请帮我解决这个异常。

谢谢,

Arun Kumar

1个回答

4
根据EncryptedStringType的javadocs:
Hibernate 3 UserType是一种实现,可以在实体持久化期间透明地加密字符串值。
而根据Hibernate 4迁移指南:
对org.hibernate.usertype.UserType方法的引用应作如下更改:
- nullSafeGet(ResultSet rs, String[] names, Object owner) 应更改为 nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) - nullSafeSet(PreparedStatement st, Object value, int index) 应更改为 nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session)
因此,jasypt 1.8无法与Hibernate 4.x兼容。
您需要升级到jasypt 1.9,根据此文档提供的信息,它支持Hibernate 4。
编辑: Jasypt文档提供了一个很好的概述。
第一句话:
Jasypt提供了jasypt-hibernate3和jasypt-hibernate4工件以进行Hibernate集成。自jasypt 1.9.0以来,这些工件必须单独添加到类路径中。
因此,您需要将jasypt-hibernate4.jar添加到类路径中以解决编译错误。

我也尝试使用jasypt-1.9.jar,但是它给出了编译时错误,即导入org.jasypt.hibernate.type.EncryptedStringType。请问您能否帮助我找到一些Jascypt与Hibernate 4集成教程或示例呢? - Arun Kumar
哦...错误在于我使用了 Hibernate 3 的旧导入 org.jasypt.hibernate.type.EncryptedStringType。当我将其替换为 org.jasypt.hibernate4.type.EncryptedStringType 后,问题得到解决。现在它可以正常工作了。 - Arun Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接