Прочитать данные из AD

Тема в разделе "Lotus + Java + LS2J", создана пользователем phantom76, 22 мар 2011.

  1. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Решаю задачу получения некоторых данных из AD для приложения на lotus.

    Насколько я понял через LS прочитать их не удастся..

    нашел пример на IBM , пример агента на java по доступу к Ldap-каталогу, как я понимаю для доступа к Microsoft AD он тоже сгодится?

    скачал библиотеки Java Naming and Directory Interface (JNDI). установил на сервер и клиент, при выполнении агента на сервер появляются ошибки:

    22.03.2011 12:37:18 RunJava: Agent printing:
    22.03.2011 12:38:21 Agent error: Error loading Agent Class: JavaAgent
    22.03.2011 12:38:21 Agent error: java.lang.ClassNotFoundException: JavaAgent
    22.03.2011 12:38:21 Agent error: at lotus.domino.AgentLoader.loadClass(Unknown Source)
    22.03.2011 12:38:21 Agent error: at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
    22.03.2011 12:38:21 Agent error: at lotus.domino.AgentLoader.runAgent(Unknown Source)

    Может кто-то сориентирует что проверять?

    для версии 8.5.1 и клиент и сервер , внешние jar нужно прописывать в ini или достаточно бросить в jvm\lib\ext ?
     
  2. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Достаточно бросить в jvm\lib\ext и рестартануть домино
     
  3. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    а по ошибкам никто не подскажет?

    Кстати если AD подцепить как ldap-каталог в коллекцию АК в lotus , удастся ли программным путем осуществлять поиск в AD?

    P.S для разбора технологии создавал агент как описанный в примере на сайте IBM ( смотри ссылку выше), но оживить не удалось.


    Правильно я понимаю, что при создании нового агента java , я должен как в примере заменить созданный стандартный package public class JavaAgent переименовать на свой LDAPSearchWithFilter?

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">много буков</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import lotus.domino.*;
    import javax.naming.*;
    import javax.naming.directory.*;
    import java.util.Hashtable;
    import java.util.Vector;

    public class LDAPSearchWithFilter extends AgentBase {

    public void NotesMain() {
    try {
    Database _db;
    Document _doc;
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();

    _db = agentContext.getCurrentDatabase();

    // Used for running agent on server with docID being passed from the calling action
    Agent ag1 = agentContext.getCurrentAgent();
    String paramid = ag1.getParameterDocID();
    Document doc = _db.getDocumentByID(paramid);

    String searchCN = doc.getItemValueString("SearchCN");
    String searchAttr = doc.getItemValueString("SearchAttr");
    // Set up the environment for creating the initial context
    String ldapCF = "com.sun.jndi.ldap.LdapCtxFactory";
    String ldapURL = "ldap://cm-test:389/";
    String ldapBaseDN = "ou=myou, o=myorg, c=us";
    String ldapUserID = "cn=Usertest";
    String ldapPassword = "";
    Hashtable env = new Hashtable(4);
    env.put(Context.INITIAL_CONTEXT_FACTORY, ldapCF);
    env.put(Context.PROVIDER_URL, ldapURL + ldapBaseDN);
    env.put(Context.SECURITY_PRINCIPAL, ldapUserID);
    env.put(Context.SECURITY_CREDENTIALS, ldapPassword);

    try {
    // Create initial context
    DirContext ctx = new InitialDirContext(env);

    String[] attrIDs = {searchAttr};
    SearchControls ctls = new SearchControls();
    ctls.setReturningAttributes(attrIDs);

    // Specify the search filter
    String filter = "(|(cn=" + searchCN + ")(uid=" + searchCN + "))";
    // Search for objects using the above filter
    NamingEnumeration answer = ctx.search("", filter, ctls);
    findCN(answer, doc);

    // Close the context when we're done
    ctx.close();
    }
    catch (NamingException e) {
    e.printStackTrace();
    }
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }

    public static void findCN(NamingEnumeration enum1, Document doc) {
    try {
    if (enum1.hasMore()) {
    while (enum1.hasMore()) {
    SearchResult sr = (SearchResult)enum1.next();
    System.out.println(">>>" + sr.getName());
    findAttrs(sr.getAttributes(), doc);
    }
    }
    else {
    Item item = doc.getFirstItem("HiddenSearchResults");
    doc.replaceItemValue("HiddenSearchResults", "CN not found");
    doc.save(true);
    }
    }
    catch (NamingException e) {
    e.printStackTrace();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }

    public static void findAttrs(Attributes attrs, Document doc) {
    try {
    Item item = doc.getFirstItem("HiddenSearchResults");
    Vector v = new Vector();
    String result;

    if (attrs.size() == 0) {
    v.addElement("Name found but attribute is blank or not found. Try again ...");
    }
    else {
    /* Get each attribute */
    try {
    for (NamingEnumeration ae = attrs.getAll(); ae.hasMore();) {
    Attribute attr = (Attribute)ae.next();
    /* Get each value */
    for (NamingEnumeration e = attr.getAll(); e.hasMore();) {
    result = (String)e.next();
    v.addElement(result);
    }
    }
    }
    catch (NamingException e) {
    e.printStackTrace();
    }
    }
    doc.replaceItemValue("HiddenSearchResults", v);
    doc.save(true);
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }

    }[/CODE]
     
  4. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    После установке в свойствах агента базового класса - LDAPSearchWithFilter.class появился другой набор ошибок:

    вероятнее всего связан с ошибкой контекста доступа к ldap, завтра проверю на другом..

    23.03.2011 00:46:15 Agent error: javax.naming.CommunicationException: localhost:389. Root exception is
    23.03.2011 00:46:15 Agent error: java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key connect_not_allowed
    23.03.2011 00:46:15 Agent error: at java.util.ResourceBundle.getObject(ResourceBundle.java:329)
    23.03.2011 00:46:15 Agent error: at java.util.ResourceBundle.getString(ResourceBundle.java:289)
    23.03.2011 00:46:15 Agent error: at lotus.notes.JavaString.getFormattedString(JavaString.java:114)
    23.03.2011 00:46:15 Agent error: at lotus.notes.AgentSecurityManager.checkConnect(AgentSecurityManager.java:214)
    23.03.2011 00:46:15 Agent error: at java.net.InetAddress.getAllByName0(InetAddress.java:1075)
    23.03.2011 00:46:15 Agent error: at java.net.InetAddress.getAllByName0(InetAddress.java:1056)
    23.03.2011 00:46:15 Agent error: at java.net.InetAddress.getAllByName(InetAddress.java:1050)
    23.03.2011 00:46:15 Agent error: at java.net.InetAddress.getByName(InetAddress.java:964)
    23.03.2011 00:46:15 Agent error: at java.net.InetSocketAddress.<init>(InetSocketAddress.java:137)
    23.03.2011 00:46:15 Agent error: at java.net.Socket.<init>(Socket.java:150)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.Connection.createSocket(Connection.java:376)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.Connection.<init>(Connection.java:211)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:136)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1685)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2616)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:307)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:190)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:208)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:151)
    23.03.2011 00:46:15 Agent error: at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:81)
    23.03.2011 00:46:15 Agent error: at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:675)
    23.03.2011 00:46:15 Agent error: at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:257)
    23.03.2011 00:46:15 Agent error: at javax.naming.InitialContext.init(InitialContext.java:233)
    23.03.2011 00:46:15 Agent error: at javax.naming.InitialContext.<init>(InitialContext.java:209)
    23.03.2011 00:46:15 Agent error: at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:94)
    23.03.2011 00:46:15 Agent error: at LDAPSearchWithFilter.NotesMain(Unknown Source)
    23.03.2011 00:46:15 Agent error: at lotus.domino.AgentBase.runNotes(Unknown Source)
    23.03.2011 00:46:15 Agent error: at lotus.domino.NotesThread.run(Unknown Source)
     
  5. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Спасибо, вроде разобрался... агент запустился.
     
  6. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Заметил особенность, на клиенте с теми же установленными библиотеками агент работает как надо, а на сервере награждает кучей ошибок написанной выше. Для тестирования обращаюсь к ldap-каталогу domino. В чем может быть причина ошибок на сервере?
     
  7. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Исключение брошено в AgentSecurityManager, но сообщение об ошибке домино сгенерить не смог.( java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key connect_not_allowed ). Очень похоже на нелокализованного клиента( или сервера ).
    Установите пакет локализации, соответствующий системе - избавитесь от ошибки PropertyResourceBundle - сможете понять чего от вас хочет SecurityManager.

    Судя по основной части стектрейса - чего-то не хватает в java.policy. Предположу, что нужен permission java.net.SocketPermission "localhost:389", "connect";
     
  8. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    пакет локализации java?
     
Загрузка...
Похожие Темы - Прочитать данные из
  1. dimat
    Ответов:
    31
    Просмотров:
    8.440
  2. maliy
    Ответов:
    17
    Просмотров:
    129
  3. Anatoly
    Ответов:
    24
    Просмотров:
    347
  4. Shouldercannon
    Ответов:
    0
    Просмотров:
    481
  5. Ivanov Pavel V
    Ответов:
    14
    Просмотров:
    1.061

Поделиться этой страницей