• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
黄洪波写点东西的地方
博客园    首页    新随笔    联系   管理    订阅  订阅
JAVA中使用LDAP登录的三种方式

搜索中关于java 登录ldap,大部分会采用  cn=xxx,ou=xxx,dc=xxx的方式,此处的cn是用户的Display Name,而不是account,而且如果ou有多层,比如我们的OU就会超过三层。

那最好是通过用户的account直接登录

代码如下:

    /**
     * 获取默认LDAP连接
* Exception 则登录失败,ctx不为空则登录成功 *
@return void */ public static LdapContext getLDAPConnection() throws AuthenticationException, CommunicationException,Exception { LdapContext ctx = null; //LDAP 连接地址 ldap://IP:PORT (default port 389) String LDAP_URL = ""; //LDAP SSL连接地址 ldaps://IP:PORT (default port 636) //(这个用起来比较麻烦,目前知道管理员改密码必须使用SSL) String LDAP_SSL_URL = ""; //用户名 String userAccount = ""; //管理员密码 String userPassword = ""; // 方式1 // 基于姓名(cn),此cn为Display Name,部门有同名就麻烦了 userAccount = "cn=xxx,OU=xxx,DC=xxx,DC=com"; // 方式2 // 基于Account User Logon name: // userAccount = "xxx@domain.xxx"; // 方式3 // 基于Account User Logon name(pre-windows 2000): // userAccount = "domain\\xxx" // 基于登录名(uid (User ID)与 unix 的 uid 完全不同)(请注意objectSID,此处尝试失败) // uid=abc123, ou=xxxx, dc=xxxx, dc=com userPassword = "xxxxx"; Hashtable<String,String> HashEnv = new Hashtable<String,String>(); HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong) HashEnv.put(Context.SECURITY_PRINCIPAL, userAccount); //AD的用户名 HashEnv.put(Context.SECURITY_CREDENTIALS, userPassword); //AD的密码 HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类 HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");//连接超时设置为3秒 HashEnv.put(Context.PROVIDER_URL, LDAP_URL); ctx = new InitialLdapContext(HashEnv, null);//new InitialDirContext(HashEnv);// 初始化上下文 return ctx; }

 

参考:Java ldap服务器的连接和修改密码

posted on 2019-12-17 11:00  红无酒伤  阅读(15662)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3