Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LDAP中超时的实现_Java_Spring_Ldap_Spring Ldap_Ldapconnection - Fatal编程技术网

Java LDAP中超时的实现

Java LDAP中超时的实现,java,spring,ldap,spring-ldap,ldapconnection,Java,Spring,Ldap,Spring Ldap,Ldapconnection,我一直在处理一个应用程序,其中我们使用LDAP获取用户详细信息。有时获取用户详细信息需要更多的时间。我想在获取详细信息的方法上实现超时,这样我们就可以避免在最坏的情况下挂起服务器上的事务 这里我们使用的是LdapUtil类,我们在其中配置了LdapTemplate类来获取所需的详细信息 我们如何在LDAP方法上实现超时? (在本例中,ldapTemplate.search(…)methods) 公共类LdapUtil{ @自动连线(必需=真) @限定符(value=“ldapTemplateAp

我一直在处理一个应用程序,其中我们使用LDAP获取用户详细信息。有时获取用户详细信息需要更多的时间。我想在获取详细信息的方法上实现超时,这样我们就可以避免在最坏的情况下挂起服务器上的事务

这里我们使用的是
LdapUtil
类,我们在其中配置了
LdapTemplate
类来获取所需的详细信息

我们如何在LDAP方法上实现超时? (在本例中,
ldapTemplate.search(…)
methods)

公共类LdapUtil{
@自动连线(必需=真)
@限定符(value=“ldapTemplateApp”)
LdapTemplate-LdapTemplate;
公共集合findProducts(字符串用户ID){
最终集products=newHashSet();
//查找用户
String usrFilter=String.format(USERID\u FILTER,globalUserId);
search(“ou=Members”,usrFilter,//注意这一行
新名称ClassPairCallBackHandler(){
public void handleNameClassPair(NameClassPair NameClassPair){
SearchResult=(SearchResult)nameClassPair;
字符串user=result.getNameInNamespace();
String GrpFilter=String.format(组过滤器,用户);
ListzonePrefixes=ldapTemplate.search(“Zones”,GrpFilter,//注意这一行
新属性映射(){
公共对象mapFromAttributes(属性属性)引发NamingException{
返回substringBeforeLast((字符串)attributes.get(“cn”).get(),“-”+“-”;
}
});
}
});
产品。删除(空);
返回newHashSet(产品);
}
}   
我们有一个LDAP.xml,其中配置了ldaptemplate

<beans xmlns="------">
<!-- LDAP -->
<bean id="contextSourceApp" class="org.springframework.ldap.pool.factory.PoolingContextSource">
<property name="contextSource" ref="contextSourceTargetApp" />
<property name="dirContextValidator">
<bean id="dirContextValidator"   
class="org.springframework.ldap.pool.validation.DefaultDirContextValidator"/>
</property>         
<property name="testOnBorrow" value="true" />
</bean>
<bean id="contextSourceTargetApp" class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" value="${ldap.url}" />
    <property name="base" value="${ldap.base.}" />
    <property name="userDn" value="${ldap.user}" />
    <property name="password" value="${ldap.password}" />
    <property name="pooled" value="false" />
</bean>

<bean id="ldapTemplateApp" class="org.springframework.ldap.core.LdapTemplate">
    <constructor-arg ref="contextSourceApp" />
</bean>

我有几点疑问:

  • 我们如何实现LDAP方法的超时以及如何配置它?(在哪类LDAP框架超时设置中)

  • 有没有办法在xml文件如LDAP.xml(在本例中)中配置它们?

  • 我找到了解决办法。 我在ldap.xml文件中添加了以下属性。到目前为止,它对我有效

    <bean id="contextSourceTargetApp" 
          class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="baseEnvironmentProperties">
            <map>
                <entry key="com.sun.jndi.ldap.connect.timeout" value="5000" />          
            </map>  
        </property>
    </bean>
    
    
    

    如果您对LDAP超时实现有任何想法,请发布任何其他解决方案。

    对于
    ActiveDirectoryLdapAuthenticationProvider
    使用LDAP.xml文件的解决方案对我不起作用。相反,我在类路径中添加了一个
    jndi.properties
    文件,其中包含以下内容:

    com.sun.jndi.ldap.connect.timeout=500
    
    com.sun.jndi.ldap.connect.timeout=500