2013-03-12 100 views
2

我正在使用Spring 3.1 + Hibernate 4.1在我的应用程序中。我想要一些字段(如密码)存储在加密表格使用Jasypt。但在整合我面临以下情况例外:Jasypt集成Hibernate 4和spring 3.1

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

对于春季Jasypt + hibernate的整合,我也跟着下面的步骤:

  1. 新增jasypt-1.8.jar在lib文件夹中。

  2. 添加在调度员的servlet(配置文件)

    <豆ID = “hibernateStringEncryptor” 级以下= “org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor” 懒的init = “假” > hibernateStringEncryptor jasypt < /豆腐>

  3. 上放置实体以下代码:

    @TypeDef( 名称= “encryptedString”, 类型类= EncryptedStringType.class, 参数= { @Parameter(名称= “encryptorRegisteredName”,值= “hibernateStringEncryptor” ) } )

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

问候,

阿伦库马尔

回答

4

据的Javadoc EncryptedStringType

甲休眠3的UserType实施,其允许实体的持久性期间透明 加密字符串值。

而且根据Hibernate 4 Migration Guide

引用org.hibernate.usertype。用户等级和积分方法应被变更为所指示:

nullSafeGet(结果集RS,字符串[]名称,对象所有者)应改为
nullSafeGet(结果集RS,字符串[]名称,SessionImplementor会话,对象所有者) nullSafeSet( PreparedStatement的ST,对象的值,INT指数)应改为 nullSafeSet(PreparedStatement的ST,对象的值,INT指数,SessionImplementor会话)

所以jasypt 1.8不会与Hibernate 4.x的兼容

你必须升级到jasypt 1.9,根据this提供Hibernate 4支持。

编辑:

Jasypt documentation提供了一个很好的概述。

这第一句:

Jasypt提供了Hibernate的整合jasypt-Hibernate3的和jasypt-hibernate4文物 。由于jasypt 1.9.0,这些工件必须分别添加到您的类路径中,并将其添加到 。

所以你需要添加jasypt-hibernate4.jar到你的类路径来解决编译错误。

+0

我也试过用jasypt-1.9.jar,但是它给出了导入'org.jasypt.hibernate.type.EncryptedStringType'的编译时错误;你能帮我带一些Hibernate 4的Jascypt集成教程或者一些例子吗? – 2013-03-12 14:09:08

+0

@ArunKumar:看我的编辑 – beny23 2013-03-13 07:50:42

+0

哦......错误是我用了旧的导入'hibernate3的org.jasypt.hibernate.type.EncryptedStringType'而且当我用'org.jasypt.hibernate4.type.EncryptedStringType'替换它时,问题就解决了。它的工作现在。 – 2013-03-15 05:59:42