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") } )

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

问候,

阿伦·库马尔

4

1 回答 1

4

根据EncryptedStringType的javadocs :

Hibernate 3 UserType 实现,它允许在实体持久化期间对字符串值进行透明加密。

并且根据Hibernate 4 Migration Guide

对 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 为 Hibernate 集成提供了 jasypt-hibernate3 和 jasypt-hibernate4 工件。从 jasypt 1.9.0 开始,这些工件必须单独添加到您的类路径中。

因此,您需要将 jasypt-hibernate4.jar 添加到您的类路径以解决编译错误。

于 2013-03-12T13:41:00.727 回答