处理不同版本的 Hibernate 库

发布于 2024-12-09 10:16:36 字数 1272 浏览 0 评论 0原文

我有一个现有的应用程序,使用一个名为 Examples 的数据库,它使用一种旧版本的 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(又名新手)应该以新的方式查询数据库。
  • module3 应该有一个虚拟类(目前它是一个 junit 东西) 使用 module1 中的 UserService 和 module2 中的 UserService 分别用于读取用户密码(明文)并将其设置回 新方式。

问题: 我面临的问题是 module3 必须处理不同版本的 hibernate libs 以及其他问题。

在我的 module3 配置中(它们都是 Spring 应用程序),我从 module1 和 module2 自动装配服务和 daos,造成了很多混乱,最终陷入了麻烦。

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

任何帮助将不胜感激。

I have an existing application using a DB called EXAMPLE, which uses a kind-of-old version of hibernate.

Users' passwords are stored as 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>

I don't know if it's always like this but basically, when querying for a user, it automatically decrypts their password so it is in clear text.

Now, on the very same database, there is a new web application running (call it webapp2). This one encrypts passwords differently and in an undecryptable way.

What I was asked to do is migrate the old users to "the new way", and what I did was to create a maven project with 3 modules:

  • module1 (aka oldie) should just be able to query the database in the
    old way (so that for every query on the user table I can have the
    user's password in clear text)
  • module2 (aka newie) should just query the database in the new way.
  • module3 should have one dummy class (for now it's a junit thingy)
    that uses UserService from module1 and UserService from module2
    respectively for read users password (clear text) and set it back the
    new way.

THE ISSUE:
What I'm facing is a whole lot of issues with module3 having to deal with different versions of hibernate libs and what not.

On my configuration of module3 (they're all spring applications) I'm autowiring services and daos from both module1 and module2 making a lot of mess which ends up in trouble.

What appears to be happening is that there's a mix of dependencies that makes instantiations of sessionFactories or daos (for now) impossible.

Any help will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在深巷 2024-12-16 10:16:36

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

  • 将加密/解密部分提取到一个小型实用程序类中,然后仅使用 JDBC 使用旧方式进行解密并使用新方式进行加密。
  • 或者仅使用第一个模块运行第一遍,以明文形式提取所有密码并将其放入文件或专用数据库表中,然后使用第二个模块运行第二遍以提取明文密码并将其存储在使用新方法对其进行加密的实体。

I wouldn't try to use both versions of Hibernate at the same time. You could

  • extract both encryption/decryption parts in a small utility class, and just use JDBC to decrypt using the old way and encrypt using the new way.
  • or just run a first pass with the first module to extract all the passwords in clear text and put them in a file or in a dedicated database table, then run a second pass with the second module to extract the clear text passwords and store them in the entities to encrypt them using the new method.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文