0

我有一个使用名为EXAMPLE 的数据库的现有应用程序,它使用一种旧版本的hibernate。

用户的密码存储为org.jasypt.hibernate.type.EncryptedStringType

<typedef name="encryptedString" class="org.jasypt.hibernate.type.EncryptedStringType">
    <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
</typedef>

    <property name="password" type="encryptedString">
        <column name="pwd" length="254" not-null="true" />
    </property>

我不知道它是否总是这样,但基本上,在查询用户时,它会自动解密他们的密码,所以它是明文的。

现在,在同一个数据库上,正在运行一个新的 Web 应用程序(称为 webapp2)。这个以不同的方式和不可解密的方式加密密码。

我被要求做的是将旧用户迁移到“新方式”,而我所做的是创建一个包含 3 个模块的 maven 项目:

  • module1(又名oldie)应该能够以旧方式查询数据库(这样对于用户表上的每个查询,我都可以以明文形式获得用户密码)
  • module2 (aka newie) 应该以新的方式查询数据库。
  • module3应该有一个虚拟类(现在它是一个 junit 的东西),它分别使用 module1 中的 UserService 和 module2 中的 UserService 来读取用户密码(明文)并将其设置回新的方式。

问题:我面临的是 module3必须处理不同版本的休眠库以及其他问题的一大堆问题。

在我的module3配置(它们都是 spring 应用程序)中,我正在自动装配来自 module1 和 module2 的服务和 daos,这会造成很多混乱,最终会遇到麻烦。

似乎正在发生的事情是,存在多种依赖关系,使得 sessionFactories 或 daos 的实例化(目前)变得不可能。

任何帮助将不胜感激。

4

1 回答 1

0

我不会尝试同时使用两个版本的 Hibernate。你可以

  • 在一个小型实用程序类中提取加密/解密部分,然后使用 JDBC 使用旧方式解密并使用新方式加密。
  • 或者只是使用第一个模块运行第一遍以以明文形式提取所有密码并将它们放入文件或专用数据库表中,然后使用第二个模块运行第二遍以提取明文密码并将它们存储在实体使用新方法对其进行加密。
于 2011-10-11T17:11:31.137 回答