3

アプリケーションでSpring3.1 + Hibernate4.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. ディスパッチャサーブレット(構成ファイル)に以下を追加しました

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

  3. エンティティに次のコードを配置しました:

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

しかし、期待した結果が得られません。この例外を解決するのを手伝ってください。

よろしく、

アルン・クマール

4

1 に答える 1

4

EncryptedStringTypeのjavadocsによると:

エンティティの永続化中に文字列値の透過的な暗号化を可能にするHibernate3UserType実装。

そして、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、オブジェクト値、intインデックス、SessionImplementorセッション)

そのため、jasypt1.8はHibernate4.xと互換性がありません。

jasypt 1.9にアップグレードする必要があります。これによると Hibernate4のサポートが提供されます。

編集:

Jasyptのドキュメントには、概要が記載されています。

この最初の文:

Jasyptは、Hibernate統合用のjasypt-hibernate3およびjasypt-hibernate4アーティファクトを提供します。jasypt 1.9.0以降、これらのアーティファクトはクラスパスに個別に追加する必要があります。

したがって、コンパイルエラーを解決するには、クラスパスにjasypt-hibernate4.jarを追加する必要があります。

于 2013-03-12T13:41:00.727 に答える