`
wangrl
  • 浏览: 152287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Java连接AD进行账号验证

 
阅读更多

 

public class LdapHelper {

private static DirContext ctx;

 

    public static DirContext getCtx() {

        if (ctx != null ) {

            return ctx;

        }

        String account = "zhanghao";           //设置访问账号

        String password = "mima";    //设置账号密码

        String root = "DC=corp,DC=homelink,DC=com,DC=cn"; // root

        Hashtable<String,String> env = new Hashtable<String,String>();

        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

        env.put(Context.PROVIDER_URL, "ldap://172.1.1.1:389/" + root);

        env.put(Context.SECURITY_AUTHENTICATION, "simple");

        env.put(Context.SECURITY_PRINCIPAL, account );

        env.put(Context.SECURITY_CREDENTIALS, password);

        try {

            ctx = new InitialDirContext(env);

        } catch (javax.naming.AuthenticationException e) {

        Logger.getLogger(LdapHelper.class.getName()).log(Level.ERROR, "连接AD服务器账户错误", e);

        } catch (Exception e) {

        Logger.getLogger(LdapHelper.class.getName()).log(Level.ERROR, "连接AD服务器错误", e);

        }

        return ctx;

    }

 

    public static void closeCtx(){

        try {

            ctx.close();

        } catch (NamingException ex) {

            Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "关闭AD连接错误", ex);

        }

    }

 

 

    /**

     * 验证账户在AD是否生效

     * @param sysID

     * @param userCode

     * @return 0 没有验证 。 1 没有这个数据。 2 数据错误。 3 成功。 4 账号错误。

     * @throws Exception

     */

    public static int valAccout(String sysID,String userCode) {

    int ret = 0; 

    if (sysID != null && !"".equals(sysID) && userCode != null && !"".equals(userCode)){

    SearchControls constraints = new SearchControls();  

    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

    String query = "(&(objectClass=*)(pager=" + sysID + "))";

    try{

    NamingEnumeration<SearchResult> en = ctx.search("", query, constraints);

    if(en == null){  

    Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在AD服务器中没有查找到数据", null);

    return 1;

    }  

    if(!en.hasMoreElements()){  

    Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在AD服务器中发生错误", null);

    return 2;

   

    while (en != null && en.hasMoreElements()){//maybe more than one element  

               Object obj = en.nextElement();

               if(obj instanceof SearchResult){  

                  SearchResult entry  = (SearchResult) obj;  

                  Attributes attr = entry.getAttributes();

                  Attribute  att = attr.get("sAMAccountName");

                  String value = att.get().toString();

                  if(value != null ){

                  if(userCode.equals(value)){

                  ret = 3;

                  }else{

                  ret = 4;

                  }

                  }

               }   

    }  

    }catch(Exception e){

    Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在做AD验证时发生错误,错误编号为"+ ret, e);

    ret = 2;

    }

    }

    return ret;

    }

 

    /**

     * 验证AD账户

     * @param systemID 系统号

     * @param userCode 用户名

     * @return 0 没有验证 。 1 没有这个数据。 2 数据错误。 3 成功。 4 账号错误。

     */

    public static int valUser(String systemID,String userCode) {

    int ret = 0;

    if (systemID != null && !"".equals(systemID) && userCode != null && "".equals(userCode)){

    try {

    getCtx();

ret = valAccout(systemID,userCode);

} catch (Exception e) {

Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "AD验证系统号" + systemID + "的用户登录错误,该用户code:" + userCode, null);

}finally{

closeCtx();

}

   

    }else{

    Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "获取验证信息系统号" + systemID + "userCode" + userCode, null);

    }

    return ret;

    }

    public static void main(String[] args) throws Exception { 

        getCtx();

        valAccout("10500100","nj_wangying");

        closeCtx();

    }

 

}

分享到:
评论

相关推荐

    java连接AD进行用户登陆

    本文将详细介绍如何使用 Java 实现与 Active Directory 的连接以及进行用户登录验证的过程。 #### 二、关键概念与术语解释 1. **Active Directory (AD)**:一种由微软开发的目录服务,用于Windows Server操作系统...

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

    下面我们将深入探讨如何使用Java和SpringBoot实现基于LDAP的AD域账号验证。 首先,我们需要了解LDAP的基本结构。LDAP目录通常采用树形结构,其中包含多个条目(entries),每个条目都有唯一的DN(Distinguished ...

    java验证AD域用户登录

    7. **安全性考虑**: 为了保护敏感信息,应使用SSL/TLS加密连接,并使用短生命周期的TLS票据(tickets)进行身份验证,避免密码在网络中明文传输。 8. **性能优化**: 对于大量用户验证,可以考虑缓存已验证的用户...

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

    然后使用`InitialLdapContext`进行连接,如果无异常抛出,即代表登录验证成功。 ```java public LdapContext adLogin(JSONObject json) { // ... 省略部分代码 ... } ``` 3. **636端口登录(SSL)**: - ...

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

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

    Java AD域插入用户和密码修改

    1. **导入AD域证书**:在Java应用中使用AD域服务之前,必须先导入AD域的证书,以建立安全的SSL/TLS连接。这通常涉及将证书导入到Java的信任库(cacerts),可以通过`keytool`命令行工具完成。 2. **配置环境**:...

    AD域单点登陆NTLM

    在描述中提到的"java 基于NTLM协议集成AD账号域登录",这通常涉及到以下步骤: 1. **配置AD连接**:在Java代码中设置AD服务器的URL、域名、用户名和密码。 2. **NTLM认证实现**:使用支持NTLM的库(如jcifs、jcacert...

    验证AD域账号登陆,获取AD域用户列表,获取用户邮箱

    验证AD域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作

    ldap 连接 AD

    本文将深入探讨如何使用Java进行LDAP与AD的连接,并通过提供的源代码示例进行解析。 首先,让我们了解LDAP与AD的基本概念。LDAP是一种应用层协议,它使用TCP/IP来查找和检索分布式目录服务中的信息。这些信息可以...

    Springboot-LDAP针对AD域控做用户和组织进行同步.zip

    在“Springboot-LDAP针对AD域控做用户和组织进行同步”的场景中,开发人员会创建一个Spring Boot应用,配置LDAP连接参数(如服务器地址、端口、基础DN等),并设置LDAP数据源。通过Spring Security的`...

    修改ad域密码及新增账号demo.zip

    在这个"修改AD域密码及新增账号demo.zip"压缩包中,我们看到的是一个基于Java操作LDAP(轻量级目录访问协议)来与AD域进行交互的示例代码,目的是为了演示如何修改AD用户的密码以及如何新增AD账号。 首先,理解Java...

    AD-LDAP创建账号.rar

    这篇内容将深入探讨如何使用Java来创建AD/LDAP账号,这对于系统管理员和开发人员来说是一项基本技能。 首先,让我们了解AD和LDAP的基本概念。活动目录是微软提出的一种分布式数据库,用于存储网络资源(如用户、...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    论坛短消息项目.rar ,java,带数据库

    开发者可能使用了JDBC(Java Database Connectivity)API来连接Java应用程序与SQL Server数据库,执行SQL语句进行数据的增删改查操作。 项目的实现可能涉及以下关键知识点: 1. **Java基础**:包括类、对象、继承...

    域登陆(通过jcifs.http.NtlmHttpFilter实现)

    - `index.jsp`:这通常是Web应用的首页,可能包含一个登录表单或者已经使用NtlmHttpFilter进行身份验证的页面。 - `META-INF`:这是一个标准的Java Web应用目录,通常包含应用的元数据,如MANIFEST.MF文件,该文件...

    Ldap数据导出到文件

    这里,-x表示使用简单绑定,-LLL抑制多行值,-b指定搜索基DN,-D和-w用于管理员身份验证。 2. 使用ldapexport工具:某些 LDAP 客户端软件,如OpenLDAP,提供了ldapexport工具,可以方便地将目录数据导出为LDIF文件...

    jive 配置全过程 以及中间需要的jar 包

    2. 用户认证:Jive支持多种身份验证机制,如内置、LDAP、AD等,根据实际需求进行设置。 3. 权限管理:定义不同角色的权限,如管理员、普通用户、访客等,确保信息的安全。 六、性能优化 1. 数据库优化:如索引设置...

    详解spring security 配置多个AuthenticationProvider

    在上面的代码中,我们定义了一个只有 root 帐号的身份验证提供程序,使用内存中的用户信息进行验证。 在注册自定义的 AuthenticationProvider 时,我们需要使用 Spring Security 的 Java 配置方式,而不是 XML 配置...

    安卓手机上应用开发管理日常

    在安卓手机上进行应用开发管理是一项日常且重要的工作,尤其涉及到员工考勤管理时,高效、便捷的系统显得尤为关键。本项目采用日历视图作为核心展示方式,结合Bmob后端服务,构建了一个全面的员工考勤管理系统。下面...

Global site tag (gtag.js) - Google Analytics