Java调用LDAP认证的例子
2012-09-18 16:54
495 查看
import java.util.Hashtable; import javax.naming.AuthenticationException; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.Control; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; public class UserAuthenticate { private String URL = "ldap://localhost:389/"; private String BASEDN = "c=china,dc=jayway,dc=se";//root private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; private LdapContext ctx = null; private Hashtable env = null; private Control[] connCtls = null; //连接ldap服务器 private void LDAP_connect(){ env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,FACTORY); env.put(Context.PROVIDER_URL, URL+BASEDN);//LDAP server env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,c=china,dc=jayway,dc=se"); env.put(Context.SECURITY_CREDENTIALS, "mysecret"); //此处若不指定用户名和密码,则自动转换为匿名登录 try{ ctx = new InitialLdapContext(env,connCtls); }catch(javax.naming.AuthenticationException e){ System.out.println("Authentication faild: "+e.toString()); }catch(Exception e){ System.out.println("Something wrong while authenticating: "+e.toString()); } } //找到到entry的 DN String getUserDN(String email){ String userDN = ""; LDAP_connect(); try{ SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration en = ctx.search("","mail="+email, constraints); //The UID you are going to query,* means all nodes if(en == null){ System.out.println("Have no NamingEnumeration."); } if(!en.hasMoreElements()){ System.out.println("Have no element."); } while (en != null && en.hasMoreElements()){//maybe more than one element Object obj = en.nextElement(); if(obj instanceof SearchResult){ SearchResult si = (SearchResult) obj; userDN += si.getName(); userDN += "," + BASEDN; } else{ System.out.println(obj); } System.out.println(); } }catch(Exception e){ System.out.println("Exception in search():"+e); } return userDN; } //验证 public boolean authenricate(String ID,String password){ boolean valide = false; String userDN = getUserDN(ID); try { ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,userDN); ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,password); ctx.reconnect(connCtls); System.out.println(userDN + " is authenticated(验证成功!)"); valide = true; }catch (AuthenticationException e) { System.out.println(userDN + " is not authenticated"); System.out.println(e.toString()); valide = false; }catch (NamingException e) { System.out.println(userDN + " is not authenticated"); valide = false; } return valide; } }
相关文章推荐
- 在PL/SQL中借助JAVA调用可执行程序的例子
- Java调用Webservice(asmx)的例子(实际应用)
- Java调用Linux命令的实现例子
- 编写存储过程,并且使用java代码调用存储过程的简单例子
- .net 调用Java Webservice 例子
- Mongodb之JavaApi调用例子
- 一个ldap身份认证的具体例子
- c#调用带有安全认证的java webservice
- 通过java调用VBS,再用VBS执行Excel中的宏的例子
- JAVA中使用LDAP进行用户认证
- Java调用Webservice(asmx)的几个例子
- java调用dll例子
- java调用条码打印机打印标签完整例子(打印中文,打印二维码)
- Django 2.1 通过LDAP 调用 FreeIPA账户信息 例子
- java代码调用http接口简单例子(实测可用)
- android binder - 客户端(java层) 调用 服务端(c++层) 例子
- JAVA调用vbScript脚本取得计算机信息小例子
- Linux平台Java调用so库-JNI使用例子
- oracle调用java方法的例子(下面所有代码都是在sql/plus