Я построил весенний mvc веб-сайт и добавил к нему весеннюю безопасность. Я аутентифицирую пользователей по LDAP.
Сейчас есть 2 основных пользователя группы ldap. Пользователи HR и пользователи ADMIN. Эти 2 группы расположены в отдельном месте в активном каталоге. Чтобы дать им право на авторизацию, я разделил две группы в своем коде.
Теперь у меня есть эта странная проблема ..
Когда я запускаю программу, все работает нормально, и каждый может войти в систему. Но через несколько дней пользователи Admin больше не могут войти (пользователи hr могут войти). Когда я просматриваю объявление в логине, я получаю эту ошибку:
Reason: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100241, problem 2001 (NO_OBJECT), data 0, best match of:
'OU=Users,OU=Group,OU=EEG,DC=electro-entreprise,DC=be'
]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100241, problem 2001 (NO_OBJECT), data 0, best match of:
'OU=Users,OU=Group,OU=EEG,DC=electro-entreprise,DC=be'
]; remaining name '/'
Ошибка указывает на этот путь -> OU=Users,Ou=GROUPs,OU=EEG
.. теперь на этом пути находится пользователь hr (пользователи hr расположены также в нескольких местах в активном каталоге, но я сканирую функциональную группу, в которой все пользователи вместе)
Теперь я не понимаю, в чем причина этой проблемы. Может кто-нибудь указать мне в любом направление?
@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter implements LdapAuthoritiesPopulator {
int aantal;
List<String> groups = new ArrayList<>();
@Override
protected void configure(AuthenticationManagerBuilder auth) {
try {
SimpleAuthorityMapper administrators = new SimpleAuthorityMapper();
administrators.setDefaultAuthority("ROLE_ADMIN");
GrantedAuthoritiesMapper admin = administrators;
SimpleAuthorityMapper hr = new SimpleAuthorityMapper();
hr.setDefaultAuthority("ROLE_HR");
GrantedAuthoritiesMapper humanRec = hr;
Settings theSettings = new Settings();
groups = theSettings.findHrGroups();
this.aantal = groups.size();
for (int i = 0; i < groups.size(); i++) {
auth.ldapAuthentication().authoritiesMapper(humanRec).userSearchFilter("(sAMAccountName={0})")
.contextSource(contextSource2(groups.get(i)));
}
auth.ldapAuthentication().authoritiesMapper(admin).userSearchFilter("(sAMAccountName={0})")
.contextSource(contextSource());
}catch(Exception e){
System.out.println(e);
}
}
@Bean
public LdapContextSource contextSource () {
LdapContextSource contextSource= new LdapContextSource();
contextSource.setUrl("ldapserver");
contextSource.setBase("base");
contextSource.setUserDn("userdn");
contextSource.setPassword("password");
contextSource.setAnonymousReadOnly(false);
contextSource.setPooled(true);
contextSource.afterPropertiesSet();
return contextSource;
}
public LdapContextSource contextSource2 (String group) {
LdapContextSource contextSource3 = new LdapContextSource();
contextSource3.setUrl("ldapurl");
contextSource3.setBase(group);
contextSource3.setUserDn("userdn");
contextSource3.setPassword("password");
contextSource3.setAnonymousReadOnly(false);
contextSource3.setPooled(true);
contextSource3.afterPropertiesSet();
return contextSource3;
}
@Override
protected void configure(HttpSecurity http) {
try {
System.out.println("Try to login user");
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/showMyLoginPage")
.loginProcessingUrl("/authenticateTheUser")
.permitAll()
.and()
.logout().permitAll()
.and()
.exceptionHandling().accessDeniedPage("/access-denied");
}catch(Exception e){
System.out.println(e);
}
}