我有这个简单的ldap客户端,它使用过时的Hashtable
集合。
class SAuth {
public static void main(String[] args) {
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:yyyy/");
// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=orcladmin");
env.put(Context.SECURITY_CREDENTIALS, "password");
try {
DirContext ctx = new InitialDirContext(env);
System.out.println(" i guess the connection is sucessfull :)");
// Do something useful with ctx
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
我是否可以使用任何现代集合而不破坏代码而不是Hashtable?
更新
class tSAuth {
public static void main(String[] args) {
Map<String, String> env = new HashMap<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:yyyy/");
// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=orcladmin");
env.put(Context.SECURITY_CREDENTIALS, "password");
try {
DirContext ctx = new InitialDirContext((Hashtable<?, ?>) env);
System.out.println(" i guess the connection is sucessfull :)");
// Do something useful with ctx
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
使用HashMap
代替HashTable
,如下所示:
Map env = new HashMap();
我不确定Context.*
的确切类型,但是,如果它是String
,那么您可以编写如下代码:
Map<String, String> env = new HashMap<String, String>();
修改强>
InitialDirContext
构造函数的参数类型为Hashtable<?,?>
。所以在这种情况下你应该Hashtable
。也许你可以像这样编码:
Hashtable<String, String> env = new Hashtable<String, String>();
答案 1 :(得分:1)
您必须根据InitialDirContext的java文档使用Hashtable。 http://docs.oracle.com/javase/7/docs/api/javax/naming/directory/InitialDirContext.html#InitialDirContext%28java.util.Hashtable%29
答案 2 :(得分:0)
您应该可以在此处使用java.util.Properties
,因为它扩展了java.util.Hashtable<Object,Object>
。