У меня есть два поставщика аутентификации
auth.authenticationProvider(adAuthProvider());
auth.authenticationProvider(jdbcAuthProvider());
Сначала пользователь пытается войти через LDAP, и, если он не находится в Active Directory (внешнее пользователь, не являющийся пользователем LDAP), приложение пытается аутентифицировать его через базу данных.
Если пользователь впервые входит в систему через LDAP, мне нужно проверить базу данных на то же имя пользователя (некоторые пользователи, не являющиеся пользователями LDAP, могли ранее зарегистрироваться в базе данных), а если его имя отсутствует в базе данных, мне нужно вставить его логин в базу данных. После этого пользователь LDAP существует в базе данных (мне нужно это, чтобы предоставить ему некоторые полномочия из базы данных).
В моем приложении у меня также есть фильтры
@Bean
public FilterRegistrationBean<LDAPUserExistsInDatabaseFilter> ldapUserExistsInDatabaseFilterRegistrationBean() {
FilterRegistrationBean<LDAPUserExistsInDatabaseFilter> ldapUserExistsInDatabaseFilterRegistrationBean = new FilterRegistrationBean<>();
LDAPUserExistsInDatabaseFilter filter = new LDAPUserExistsInDatabaseFilter();
ldapUserExistsInDatabaseFilterRegistrationBean.setFilter(filter);
return ldapUserExistsInDatabaseFilterRegistrationBean;
}
@Bean
public FilterRegistrationBean<MethodPathRequestFilter> methodPathRequestFilterRegistrationBean() {
FilterRegistrationBean<MethodPathRequestFilter> methodPathRequestFilterRegistrationBean = new FilterRegistrationBean<>();
MethodPathRequestFilter methodPathRequestFilter = new MethodPathRequestFilter();
methodPathRequestFilterRegistrationBean.setFilter(methodPathRequestFilter);
return methodPathRequestFilterRegistrationBean;
}
Этот фильтр берет некоторую информацию из базы данных.
Вопрос в том, как я могу проверить пользователя LDAP authenticatad в базе данных перед запуском цепочки фильтров (для фильтров нужны полномочия из базы данных)? И как я могу вставить его учетные данные в базу данных сразу после аутентификации? Подходит ли для этого фильтр с наивысшим порядком?
Короче говоря - я хотел бы иметь следующий процесс - АУТЕНТИФИКАЦИЯ - ПРОВЕРЬТЕ ПОЛЬЗОВАТЕЛЯ В БАЗЕ ДАННЫХ (вставьте, если нет) - ЦЕПЬ ФИЛЬТРА