如何使用Spring Security、Spring LDAP和Hibernate处理用户信息



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

由于到目前为止所有内容都在一个位置(DB)中,因此报告都相当简单,因为Hibernate在从所需查询开始时根据需要管理信息检索。获取用户名等非常简单,因为Hibernate是惰性加载数据的。

由于希望使用LDAP驱动用户信息,Hibernate将不再能够动态地填充用户信息,因为它将不再管理用户的数据。当我们需要获取用户数据(如Name等)时,我们应该如何使用LDAP来驱动用户数据并处理身份验证/授权,而不会造成太多麻烦?

我们考虑使用一种混合方法,其中将LDAP视为数据的"源",而保持当前系统不变。这将需要更改事务处理代码,以便根据LDAP进行更新,以便实时事务使用最新信息,还需要针对LDAP进行定期同步,以使应用程序DB保持最新,以便进行报告。

这个解决方案似乎有点粗糙,而且似乎有很多移动的部分,但我在网上其他地方找不到太多关于这个主题的内容。

用户信息应该如何处理/应用程序应该如何构建,以便所有用户信息仍然易于访问,并且可以轻松地绑定到系统的其余部分以进行报告?有没有一种方法可以集成Spring LDAP和Hibernate,这样数据层上面的层就不必知道了?还是将信息从LDAP拉到现有数据库中是最简单的方法?

如果您根本不能删除用户表,因为它是从其他实体使用的,那么我的建议是将安全内容从业务内容中分离出来。

这意味着从用户表中删除仅用于安全需要的信息(登录名、密码等),以便只保留实现业务用例所需的内容。

然后重写安全内容,使其基于LDAP。我想你找到了一种方法来获取给定主体的用户数据库对象。

只剩下一件事,如果一个新的人获得新的登录,如何创建新的用户数据库实体。你有三个选择,哪一个是最好的取决于你的应用程序:

  • 如果用户第一次登录,创建数据库实体
  • 创建数据库实体如果你第一次需要它
  • 在LDAO中创建数据库实体时(或几分钟后)创建数据库实体,例如使用cron作业或一些Spring Scheduling服务。

最新更新