java - Spring Security、Spring LDAP、Hibernate如何处理用户信息?

标签 java hibernate spring ldap

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

由于到目前为止一切都在一个地方(数据库),因此报告都相当简单,因为 Hibernate 在开始所需查询时根据需要管理信息检索。获取用户名等非常简单,因为 Hibernate 会延迟加载数据。

由于希望使用 LDAP 驱动用户信息,Hibernate 将不再能够即时填充用户信息,因为它不会管理用户数据。当我们需要抓取姓名等用户数据时,我们应该如何使用 LDAP 来驱动用户数据并处理身份验证/授权而不造成太多痛苦?

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

这个解决方案似乎有点老套,而且似乎有很多 Activity 部件,但我在网络上的其他地方找不到太多关于这个主题的信息。

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

最佳答案

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

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

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

只剩下一件事,如果新人获得新登录,如何创建新的用户数据库实体。您有 3 个选择,最好的一个在很大程度上取决于您的应用:

  • 如果用户第一次登录则创建数据库实体
  • 如果您首先需要它,请创建数据库实体
  • 在 LDAO(或稍后的一些 minites)中创建数据库实体时创建它,例如使用 cron 作业或某些 Spring Scheduling 服务。

关于java - Spring Security、Spring LDAP、Hibernate如何处理用户信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6917658/

相关文章:

java - ManyToMany 关系以及 ManyToMany 与另一个类的关系的联接表

java - 如何在 Multi-Tenancy 系统中为指定租户切换jpa方言

java - hibernate 环境 : can't create custom revision entity

java - Java中基于可变属性返回Mono的方法的线程安全

java - MyBatis - 连接同一个表返回错误值

java - 将 ArrayList 作为 RubyArray 传递给 Ruby

spring - 基准/分析最大用户可以支持 Web 应用程序

spring - 如何使用 XML 配置在 Spring 中将多个包传递给 packagesToScan 属性

java - ClassLoader.getResources 在 Weblogic/Spring 应用程序上返回一个空枚举

java - 一次交易中的两种方法