使用Spring Security登录时创建用户

时间:2013-01-18 16:38:44

标签: spring-security data-migration

我们如何使用Spring Security将用户从一个数据库迁移到另一个数据库,实时且对用户透明?

背景

我们在Web应用程序中使用Spring Security和基于表单的身份验证。我们的配置使用由用户数据库支持的标准Spring JDBC组件。但是,我们还有一个旧系统的另一个用户数据库,与新系统相比,用户数量大约是十倍。我们希望允许旧数据库中的用户也能登录。对于用户来说,这应该是完全透明的。

由于旧数据库中的大多数用户不再处于活动状态,因此我们不希望将所有用户迁移到新数据库中。出于性能原因,我们希望保持新用户数据库尽可能小,同时仍包含所有活动用户。经过一段时间后,我们希望断开旧用户数据库,有效删除所有非活动用户。

我们提出的想法是按需迁移用户。当不存在的用户(不在新数据库中)尝试登录时,我们要检查用户是否可以对旧用户数据库进行身份验证,并在这种情况下将用户迁移到新数据库并自动登录。 / p>

Spring Security框架中有许多扩展点,问题是哪些扩展点适合我们的目的?

1 个答案:

答案 0 :(得分:0)

我认为最好的地方是org.springframework.security.authentication。 AuthenticationManager 。您可以准备两个不同的AuthenticationProvider实例(适用于新旧数据库)。如果将它们注入defult AuthenticationManager(实际上它是ProviderManager类),那么它将通过两个提供程序进行迭代,并为您提供第一个成功的身份验证结果。您的自定义AuthenticationManager将具有略微不同的逻辑:

  • 它将知道两个提供者之间的区别
  • 首先它将检查新数据库
  • 在BadCredentialsException的情况下,它将检查旧数据库
  • 如果用户通过旧数据库进行身份验证,则会复制帐户记录
  • 最好先调用AuthenticationProvider以确保一切正常