Я бы сказал, что расширение UsernamePasswordAuthenticationFilter
и переопределение attemptAuthentication()
- это хороший способ. В attemptAuthentication()
вы можете проверить как данные БД, так и данные LDAP. Вы можете загрузить информацию о пользователе, используя UserDetailsService
как this .
Другой способ - это (как вы сами предложили) расширение AbstractAuthenticationProcessingFilter
и запуск фильтра после фильтра FORM_LOGIN, например:
<http ...>
...
<custom-filter after="FORM_LOGIN_FILTER" ref="myAuthenticationProcessingFilter" />
</http>
Хорошая идея, вероятно, состоит в том, чтобы создать 2 отдельных фильтра для аутентификации LDAP и БД и запускать их один за другим. Таким образом, вы можете отключить любой из них, если вам нужно.
Эта часть документов Spring поможет вам в пользовательских фильтрах.