⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jndiauth.java

📁 这是几个对ldap操作的jndi,可以直接编译运行
💻 JAVA
字号:
//package jndi;/*曾海 2003/9 JNDI搜索程序验证连接系统。*/import java.util.*;// hashtableimport javax.naming.*;//命名服务import javax.naming.directory.*;//初始化上下文用import javax.swing.JOptionPane;/* ldap的端口是389,ldap://localhost:389  如果是sunone用户,连接50028口子。之前别忘记先开用户,挺复杂的,看我的教程吧。 准备验证地连接上服务器在服务上准备:uid=ZHai,ou=Groups,dc=jssvc,dc=com记录。密码设成916,如果不会请看讲义*/public class JNDIAuth { public static String sunLdapContext="com.sun.jndi.ldap.LdapCtxFactory"; public static String hostURL="ldap://127.0.0.1:389";//这个端口取决于你安装时的选择。 public static String searchBase= "obj=user,cn=portal";//从默认的点开始寻找,这里的根是dc-dc public static String searchContents="(uid=*)";//sn=surname名字(sn=zeng)也可以,大家可以试试sn=*可以任意匹配 public static String dn="cn=portal"; public static String pw="secret";  public JNDIAuth() {  pw = JOptionPane.showInputDialog(null,null,"输入您的密码啦!",JOptionPane.DEFAULT_OPTION ); try{    Hashtable env = new Hashtable();//准备放属性    env.put(Context.INITIAL_CONTEXT_FACTORY ,sunLdapContext);    env.put(Context.PROVIDER_URL ,hostURL);    env.put(Context.SECURITY_AUTHENTICATION ,"simple");    env.put(Context.SECURITY_PRINCIPAL ,dn);    env.put(Context.SECURITY_CREDENTIALS,pw);    SearchControls constraints  = new SearchControls();//这个类在naming.directory里的,用于确定搜索的范围,是全局,一层还是下一层,请看我的备课笔记    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE  ) ;//搜索全部的目录树    DirContext  ctx = new InitialDirContext(env);//这句会有意外,好好捉吧    System.err.println("非常好,连接上了");    NamingEnumeration results = ctx.search(searchBase,searchContents,constraints);    while(results!=null && results.hasMore() ){     SearchResult sr =(SearchResult)  results.next() ;     System.err.println("找到的记录标记是"+sr.getName() );     Attributes attrs = sr.getAttributes() ;//来自javax.naming.directory,某条记录的属性,一张表     NamingEnumeration ne = attrs.getAll() ;//取出这张表,一行就是一个Attribute     while( ne!=null && ne.hasMoreElements()  ){          Attribute attr =(Attribute) ne.next() ;          System.err.print(attr.getID() +"内容是");//每个行,比如mail地址,可能有多条,痛苦吧          Enumeration details = attr.getAll() ;          while(details!=null && details.hasMoreElements() ){            System.err.println("  ---   "+details.nextElement() );          }//处理某一项,如mail,的多个值     }//内部while 扫描某个用户的属性表   }//外层扫描多条用户记录的循环  }catch (Exception e){ System.err.println("错误,连接不上服务器,可能是密码不对劲儿") ; System.exit(1);}; }  public static void main(String[] args) {    JNDIAuth JNDIAuth1 = new JNDIAuth();    System.exit(0);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -