【问题标题】:ldap connection pool in web applicationWeb应用程序中的ldap连接池
【发布时间】:2014-08-05 03:29:26
【问题描述】:

我需要在 Web 应用程序中使用 ldap 连接池。为了验证管理员身份,我使用以下代码:

    Properties props = new Properties();
    System.setProperty("com.sun.jndi.ldap.connect.pool", "true");
    System.setProperty("com.sun.jndi.ldap.connect.pool.maxsize", "1");
    System.setProperty("com.sun.jndi.ldap.connect.pool.debug", "fine");

    props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    props.put(Context.PROVIDER_URL, "ldap://localhost:10389/o=myldap");
    props.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");//adminuser 
    props.put(Context.SECURITY_CREDENTIALS, "xxxxx");
    InitialDirContext context = new InitialDirContext(props);

要查找和验证另一个用户,我需要更改 SECURITY_PRINCIPAL 和 SECURITY_CREDENTIALS,然后再次创建一个新上下文。当我这样做是 POJO 时,它使用连接池,但是当我在多用户 Web 应用程序中使用它时(我用两个线程尝试过),它不使用连接池。

对此可以使用什么解决方法?

【问题讨论】:

    标签: java ldap jndi connection-pooling


    【解决方案1】:

    需要将参数设置为JVM系统参数,在java调用时使用-D参数。

    【讨论】:

      【解决方案2】:
      System.setProperty("com.sun.jndi.ldap.connect.pool", "true");
      System.setProperty("com.sun.jndi.ldap.connect.pool.maxsize", "1");
      System.setProperty("com.sun.jndi.ldap.connect.pool.debug", "fine");
      

      错误的属性对象。您应该将它们设置为“道具”对象,而不是系统属性对象。

      编辑并且不要调试为真。设置它具有关闭池的奇怪效果。

      【讨论】:

      • 但是当我在 props 对象中使用它们时,即使将 maxsize 设置为 1,池似乎也不会发生,我创建了任意数量的连接,但是当我将它们用作系统属性时,它在我关闭旧连接之前不会创建另一个连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2018-12-16
      • 2013-09-22
      相关资源
      最近更新 更多