Как мы можем переносить пользователей из одной базы данных в другую, используя Spring Security, «на лету» и прозрачно для пользователя?
Фон
Мы используем Spring Security с аутентификацией на основе форм в нашем веб-приложении. В нашей конфигурации используются стандартные компоненты Spring JDBC, поддерживаемые пользовательской базой данных. Однако у нас также есть другая пользовательская база данных из старой системы, в которой число пользователей примерно в десять раз больше, чем в новой. Мы хотим, чтобы пользователи старой базы данных также могли входить в систему. Для пользователя это должно быть абсолютно прозрачно.
Поскольку большинство пользователей в старой базе данных больше не активны, мы не хотим переносить их всех в новую базу данных. Из соображений производительности мы хотим, чтобы новая база данных пользователей была как можно меньше, но при этом содержала всех активных пользователей. Через некоторое время мы хотели бы отключить старую базу данных пользователей, фактически удалив всех неактивных пользователей.
Идея, которую мы придумали, заключается в том, чтобы мигрировать пользователей по требованию. Когда несуществующий пользователь (не в новой базе данных) пытается войти в систему, мы хотим проверить, может ли пользователь пройти аутентификацию в старой пользовательской базе данных, и в этом случае перенести пользователя в новую базу данных и автоматически войти в систему.
В фреймворке Spring Security есть много точек расширения, вопрос в том, какие из них подойдут для наших целей?