powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring & LDAP
1 сообщений из 1, страница 1 из 1
Spring & LDAP
    #34585008
_Flint_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь работать с помощью Spring с LDAP-сервером, получается получить список объектов, получает найти один объект, не получается добавить. Вот класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
 package  com.tfnetwork.admin.user.dao.ldap;
 import  com.tfnetwork.admin.user.dao.IUserDAO;
 import  com.tfnetwork.admin.user.User;
 import  java.util.List;
 import  java.util.HashMap;
 import  java.util.Set;
 import  org.springframework.ldap.LdapTemplate;
 import  org.springframework.ldap.ContextMapper;
 import  org.springframework.ldap.EntryNotFoundException;
 import  org.springframework.ldap.support.DirContextAdapter;
 import  org.springframework.ldap.support.DistinguishedName;
 import  org.springframework.ldap.support.filter.EqualsFilter;
 import  org.springframework.ldap.support.filter.AndFilter;
 import  javax.naming.Name;
 import  javax.naming.InvalidNameException;

 public   class  LDAPUserDAO  implements  IUserDAO {

     public   static   final  String LDAP_CLASS = "inetOrgPerson";

     private  LdapTemplate template;
     private  UserContextMapper mapper;

     public   void  setLdapTemplate(LdapTemplate template) {
         this .template = template;
    }

     public   void  setContextMapper(ContextMapper mapper) {
         this .mapper = (UserContextMapper) mapper;
    }

     public   void  create(User user) {
        user.setId(user.getFirstName());
        DirContextAdapter context =  new  DirContextAdapter();
        mapper.mapToContext(user, context);
         try  {
           Name dn = buildDN(user);
           template.bind(dn, context,  null );
        }  catch  (Exception e) {
            System.out.println("Binding error: "+e.getMessage());
        }
    }

     public   void  update(User user) {
        template.rebind(buildDN(user),  null , mapper.buildAttributes(user));
    }

     public  User load(Object id) {
        User result =  null ;

         try  {
            result = (User) template.lookup(buildDN(id), mapper);
            System.out.println("Loaded User id="+id);
        }  catch  (EntryNotFoundException nfe) {
            System.out.println("User with CN=" + id + " is not found.");
        }
         return  result;
    }

     public  List find(HashMap criteria) {
        AndFilter filter =  new  AndFilter();
        filter.and( new  EqualsFilter("objectclass", LDAP_CLASS));
        Set<String> filterSet = criteria.keySet();

         for  (String key : filterSet) {
            String value = (String) criteria.get(key);

             if  (value !=  null  && !value.trim().equals("")) {
                filter.and( new  EqualsFilter(key, value));
            }
        }
         return  template.search(DistinguishedName.EMPTY_PATH, filter.encode(), mapper);
    }


     protected  Name buildDN(User user) {
         return  buildDN(user.getId());
    }

     protected  Name buildDN(Object id) {
        DistinguishedName dn =  new  DistinguishedName();
        dn.add("cn", (String) id);
         return  dn;
    }
}

Выводит ошибку:
javax.naming.NameNotFoundException: [LDAP: error code 32 - Родительская запись не найдена в иерархии.]; remaining name 'cn=Test'

Если же последнюю процедуру переделать следующим образом:
Код: plaintext
1.
2.
3.
4.
     protected  Name buildDN(Object id) {
        DistinguishedName dn =  new  DistinguishedName(BASE_DN);
        dn.add("cn", (String) id);
         return  dn;
    }
Где BASE_DN это базовы DN подключения, в частности:
cn=Users,dc=companyname,dc=companydomen
С данным DN в стороннем приложении по управлению LDAP объект создается, класс же возвращает:
javax.naming.NameNotFoundException: [LDAP: error code 32 - Родительская запись не найдена в иерархии.]; remaining name 'cn=hh, cn=Users, dc=softclub, dc=scx'

Помогите пожалуйста разобраться
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring & LDAP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]