1

Spring Securityを使用して、オンザフライでユーザーに対して透過的にユーザーをあるデータベースから別のデータベースに移行するにはどうすればよいですか?

バックグラウンド

Webアプリケーションでは、フォームベースの認証でSpringSecurityを使用しています。この構成では、ユーザーデータベースに基づく標準のSpringJDBCコンポーネントを使用します。ただし、古いシステムの別のユーザーデータベースもあります。これは、新しいシステムの約10倍のユーザー数です。古いデータベースのユーザーにもログインできるようにします。ユーザーにとって、これは完全に透過的である必要があります。

古いデータベースのほとんどのユーザーはもうアクティブではないため、すべてのユーザーを新しいデータベースに移行する必要はありません。パフォーマンス上の理由から、すべてのアクティブなユーザーを含めながら、新しいユーザーデータベースをできるだけ小さくしたいと考えています。しばらくして、古いユーザーデータベースを切断し、非アクティブなすべてのユーザーを効果的に削除したいと思います。

私たちが思いついたアイデアは、ユーザーをオンデマンドで移行することです。存在しないユーザー(新しいデータベースにない)がログインしようとしたときに、ユーザーが古いユーザーデータベースに対して認証できるかどうかを確認します。その場合、ユーザーを新しいデータベースに移行して自動的にログインします。

Spring Securityフレームワークには多くの拡張ポイントがありますが、問題は、どの拡張ポイントが私たちの目的に適しているかということです。

4

1 に答える 1

0

最適な場所はorg.springframework.security.authenticationだと思います。AuthenticationManager。2つの異なるAuthenticationProviderインスタンスを準備できます(新しいデータベースと古いデータベース用)。それらをデフォルトのAuthenticationManager(実際にはProviderManagerクラス)に挿入すると、両方のプロバイダーを反復処理し、最初に正常な認証結果を提供します。カスタムAuthenticationManagerのロジックは少し異なります。

  • 2つのプロバイダーの違いがわかります
  • まず、新しいデータベースをチェックします
  • BadCredentialsExceptionの場合、古いデータベースをチェックします
  • ユーザーが古いデータベースを介して認証されている場合は、アカウントレコードがコピーされます
  • 最初のAuthenticationProviderをリコールして、すべてが正常であることを確認することをお勧めします
于 2013-01-18T16:58:30.230 に答える