我有两个身份验证提供程序
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;
}
这些过滤器从数据库中获取一些信息。
问题是-在运行过滤器链之前,我如何在数据库中检查Authenticatad LDAP用户(过滤器需要数据库的权限)?以及如何在身份验证后立即将他的凭据插入数据库?最高阶的过滤器适合吗?
长话短说-我想执行以下过程-身份验证-在数据库中检查用户(如果没有,请插入-过滤链)