2011-08-02 73 views
3

我有一个基于Spring MVC的应用程序,它使用Hibernate来处理所有数据库交互需求。现在需要更新应用程序以使用我们的LDAP基础结构来驱动用户信息,包括基本用户数据(如姓名和电子邮件)以及身份验证和授权需求。如何用Spring Security,Spring LDAP和Hibernate处理用户信息?

既然一切都已经在一个地方(在DB)到现在为止,该报告是相当简单的,因为Hibernate是信息检索管理需要与所需的查询启动时。抓取用户的名字等非常简单,因为Hibernate懒惰地加载数据。

随着驱动与LDAP用户信息的欲望,Hibernate将不再能够填充在飞行中的用户信息,因为它不会是管理用户的数据。当我们需要抓取用户数据如姓名等时,我们应该如何使用LDAP来驱动用户数据并处理认证/授权,而不会造成太大的痛苦?

我们已经使用其中LDAP被视为“源”为数据和当前系统被保持原样混合方法考虑。这将需要更改事务处理代码以根据LDAP进行更新,以便实时事务使用最新信息,并且还需要与LDAP进行定期同步,以使应用程序数据库保持最新以用于报告目的。

该解决方案似乎有点哈克,而且似乎有很多运动部件的,但我找不到太多关于这个问题在网络上的其他地方。

应该如何用户信息处理/应该如何应用结构化,让所有的用户信息仍然很方便,可以很容易地捆绑到系统的其余部分用于报告的目的呢?有没有一种方法可以集成Spring LDAP和Hibernate,使数据层以上的层不必知道?或者将LDAP中的信息拉入现有数据库是最简单的方法?

+0

您的数据模型是否有任何对用户的引用,以至于您仍然需要用户数据库实体? – Ralph

+0

@Ralph - 是的,其他实体连接到特定用户(例如,用户X采取了行动Y)。 – cdeszaq

回答

1

整合如果你不能删除用户表可言,因为它是从其他实体使用,那么我的建议是从商业的东西separete安全的东西。

这意味着除去只为安全需要从用户表信息(登录名,密码,...),所以只有东西仍然实现理财周报案件是必要的。

然后重写安全性内容,以便基于LDAP。我想你会找到一种方法来获取给定prinipal的用户数据库对象。

只有一件事情会留下来,如果新用户获得新的登录名,如何创建新的用户数据库实体。你有3种选择,什么是最好的一个强烈依赖于你的应用程序:

  • 创建数据库实体,如果用户首次登录
  • 创建数据库实体,如果你首先需要它
  • 创建数据库实体当它在LDAO(或稍后的一些小型站点)中创建时,例如使用cron作业或某些Spring调度服务。
+1

这是我一起去的解决方案。用户信息(系统上的帐户以及帐户中的信息)都通过时间作业从LDAP中提取。 – cdeszaq

相关问题