`

java 验证ldap的用户

    博客分类:
  • ldap
阅读更多

这几天做基于ibm portal 6的登录改造, 验证是基于ldap的。

由于没有登录portlet的源代码,于是就自己去做这个ldap的用户认证。一开始向到根据用户名和密码去查找ldap,根据找不着得到用户来决定验证是否成功, 但这个密码无论怎样都验证不成功。。。只好放弃该方法

难道就没有办法验证ldap用户了??网上搜索, 还是得到了方法, 其实很简单,就是利用这个用户名和密码连接一次ldap,连得上就成功,否则失败。

参考代码贴出来了,如下:

package com.test.ldap;

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 = "ou=catalogue,o=test.com";
    private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
    private LdapContext ctx = null;
    private Hashtable env = null;
    private Control[] connCtls = null;
   
   
    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");
//此处若不指定用户名和密码,则自动转换为匿名登录
       
        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());
        }
    }
   
   
    private 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;
    }
}
 

原来,一切这么简单。

 

分享到:
评论
2 楼 娟动我心 2014-04-04  
用户的email  如何设置时唯一的如果不设置唯一的话 那么用户认证就有问题的啊 就会出现多个数据
1 楼 javazeke 2010-04-14  
lz有没有做过向域中加域账户,,的问题,,一直没有权限,,或者把刚建立的用户向组中加,,也不行,,报违反约束错误,,,
lz看看能不能搞定

相关推荐

    JAVA中使用LDAP进行用户认证

    JAVA中使用LDAP进行用户认证是指在JAVA应用程序中使用轻量级目录访问协议(LDAP)来进行用户身份验证。LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行定制。LDAP支持TCP/IP协议,使...

    java连接和验证ldap文档

    Java 连接和验证 LDAP 文档 Java 连接和验证 LDAP 文档是一份关于 Java 语言连接和验证 LDAP 服务器的学习文档。LDAP(Lightweight Directory Access Protocol)是一种目录访问协议,用于管理和访问目录服务中的...

    JAVA通过LDAP+SSL(证书)实现用户和组织(部门)增删改查.zip

    在Java中,使用LDAP进行用户验证通常涉及以下步骤: 1. 创建初始上下文:使用`InitialDirContext`类初始化到 LDAP 服务器的连接。 2. 实现认证:通过提供用户名和密码,使用`DirContext`的`bind`方法进行身份验证。 ...

    java验证ldap

    用JNDI验证LDAP域中是否有对应的用户与密码。相当与域登陆

    使用Java操作LDAP案例

    本案例将介绍如何使用Java编程语言操作LDAP服务器,实现用户登录验证等功能。 首先,我们需要了解Java中的JNDI(Java Naming and Directory Interface)框架,它是Java提供的一套标准API,用于与各种命名和目录服务...

    JAVA ldap AD 域 免证书 查询 修改 删除 新增 启用 禁用 修改密码

    在这篇文章中,我们将探讨使用 JAVA 实现 LDAP 的 AD 域免证书查询、修改、删除、新增、启用、禁用和修改密码的操作。 首先,让我们了解什么是 LDAP 和 AD 域。LDAP(Lightweight Directory Access Protocol)是一...

    java操作Ldap,支持建立开启状态的用户,支持修改密码,放入eclipse测试即用

    Java操作LDAP(轻量级目录访问协议)是企业级应用中常见的任务,特别是在管理AD(活动目录)域用户时。本项目提供了一种便捷的方式,允许开发者在Java环境中创建、管理和更新AD域中的用户信息,并且可以直接在...

    java操作LDAP的架包

    Java操作LDAP(Lightweight Directory Access Protocol)是一种常见的方式,用于在分布式环境中管理和访问目录信息。在Java中,我们可以使用各种库来实现与LDAP服务器的交互,这些库提供了丰富的API,使得开发人员...

    LDAP实现AD域账号验证 - Java/SpringBoot

    在IT行业中, Lightweight Directory Access Protocol (LDAP) 是一种用于存储和检索目录信息的标准协议,而Active Directory (AD) 是微软提供的目录服务,广泛应用于企业环境中进行用户身份验证和权限管理。Java和...

    JAVA中使用LDAP进行用户认证.pdf

    ### JAVA中使用LDAP进行用户认证的关键知识点 #### LDAP简介与特性 LDAP,即轻量级目录访问协议(Lightweight Directory Access Protocol),源自X.500标准,但更简化且可定制。它支持TCP/IP协议,是互联网环境下...

    java LDAP+CAS单点登录

    Java LDAP+CAS单点登录是一种常见的企业级身份验证和授权解决方案。这个技术组合允许用户只需登录一次,就可以访问多个相互独立的应用系统,提高了用户体验并增强了安全性。以下是对这个主题的详细解释: **LDAP...

    java通过LDAP验证Active Directory服务

    本文将详细介绍如何使用Java通过LDAP协议来验证Active Directory服务,并获取用户信息。 #### 二、基础知识 ##### LDAP - **定义**:LDAP是一种开放的标准协议,用于访问和维护分布式目录信息。 - **特点**: - ...

    java使用ldap修改ad域用户密码.pdf

    Java 使用 LDAP 修改 AD 域用户密码 本文档主要介绍了如何使用 Java 通过 LDAP 协议修改 Active Directory(AD)域用户密码的详细步骤。下面将对标题、描述、标签和部分内容进行详细解释。 一、标题和描述 标题...

    LDAP搭建及其Java代码连接

    1. **身份验证**:很多应用程序使用LDAP作为后端进行用户登录验证。 2. **权限控制**:基于LDAP的组成员关系进行权限分配。 3. **服务配置**:如邮件服务器、DNS服务器可以从LDAP获取配置信息。 4. **日志和审计*...

    java验证AD域用户登录

    Java验证AD域用户登录是企业级应用中常见的一种身份验证方式,主要用于确保只有授权的用户才能访问特定的系统或服务。AD(Active Directory)域是由微软Windows Server操作系统提供的目录服务,用于集中管理用户账户...

    java LDAP操作

    Java LDAP(轻量级目录访问协议)操作是Java开发者在处理目录服务时常见的任务,尤其在需要进行身份验证、用户管理或企业应用集成时。LDAP是一种开放标准的网络协议,用于存储和检索分布式目录信息。在Java中,我们...

    java 连接ldap 服务器源码

    Java连接LDAP服务器是一种常见的任务,尤其在企业级应用中,用于身份验证、用户管理或访问控制。LDAP(轻量级目录访问协议)是一种基于X.500标准的目录服务协议,它允许快速查找和管理分布式数据库中的信息。在Java...

    LDAP.rar_java ldap_ldap_ldap java

    LDAP在Java环境中尤其重要,因为它允许Java应用程序与LDAP服务器进行交互,实现身份验证、授权以及数据检索等功能。 **Java LDAP库** 在Java中,我们可以使用Java LDAP API来与LDAP服务器通信。这个API包含在Java...

    JAVA使用Ldap操作AD域的方法示例

    总的来说,Java通过Ldap操作AD域涉及网络连接、身份验证、目录查询以及可能的SSL安全通信。理解这些概念和API的使用是实现AD域集成的关键。通过以上介绍和示例代码,你应该能够开始编写自己的AD域操作功能。记得在...

    java使用ldap修改ad域中的用户密码

    Java 使用 LDAP 修改 AD 域中的用户密码需要满足一定的环境要求,包括安装 Active Directory 域控制器、证书服务和 Java 运行环境。然后,需要使用 Java 语言编写代码来实现 LDAP 修改用户密码的操作。这个操作需要...

Global site tag (gtag.js) - Google Analytics