Безопасность Spring - ошибка 32 LDAP после аутентификации - PullRequest
0 голосов
/ 09 января 2020

Я построил весенний 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);
        }

    }
...