不多说直接看代码,如下:

import java.util.Hashtable;

import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
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;

/**
 * 用户登陆认证,LDAP跨域认证,通过LDAP对用户进行更新
 * 
 */
public class LdapCheck {
    private static LdapContext ctx = null;
    private static Control[] connCtls = null;

/**** 定义LDAP的基本连接信息 ******/
    // LDAP的连接地址(ldap://ip:port/)port默认为389
    private static String URL = "?";
    // LDAP的根DN
    private static String BASEDN = "dc=?,dc=?,dc=?";
    // LDAP的连接账号(身份认证管理平台添加的应用账号,应用账号格式:uid=?,ou=?,dc=????)
    private static String PRINCIPAL = "uid=?,ou=?,dc=?,dc=?,dc=?";
    // LDAP的连接账号的密码(身份认证管理平台添加的应用账号的密码)
    private static String PASSWORD = "?";

public static void main(String[] args) {
        // 登录用户的用户名和密码
        String username = "?";
        String password = "?";
        System.out.println(authenticate(username, password));
        closeCtx();
    }

// 校验用户名密码的方法
    public static boolean authenticate(String usr, String pwd) {
        boolean valide = false;
        if (pwd == null || pwd == "")
            return false;
        if (ctx == null) {
            getCtx();
        }
        String userDN = getUserDN(usr);
        if ("".equals(userDN) || userDN == null) {
            return false;
        }
        try {
            ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
            ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, pwd);
            ctx.reconnect(connCtls);
            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;
    }

public static void getCtx() {
        if (ctx != null) {
            return;
        }
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, URL + BASEDN);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL);
        env.put(Context.SECURITY_CREDENTIALS, PASSWORD);
        try {
            // 链接ldap
            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());
        }
    }

public static void closeCtx() {
        try {
            if (ctx != null)
                ctx.close();
        } catch (NamingException ex) {

}
    }

public static String getUserDN(String uid) {
        String userDN = "";
        try {
            SearchControls constraints = new SearchControls();
            constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
            NamingEnumeration<?> en = ctx.search("", "uid=" + uid, constraints);
            if (en == null) {
                System.out.println("Have no NamingEnumeration.");
            }
            if (!en.hasMoreElements()) {
                System.out.println("Have no element.");
            }
            while (en != null && en.hasMoreElements()) {
                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;
    }
}

Java LDAP统一身份认证相关推荐

  1. 使用宁盾LDAP目录服务为WiKi等开源系统提供统一身份认证

    成长型科技企业(100-500人),往往应用系统不多(5~6套),常见的有Gitlab.wiki.自研LDAP应用等,但应用的维护几乎以手动单独操作为主. 在以前:由于企业没有搭建AD域或OpenDJ ...

  2. 统一身份认证(SSO/AD域/LDAP)

    统一身份认证(SSO/AD域/LDAP) 单点登录 单点登录:(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登 ...

  3. JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案

    问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...

  4. signature=4f0a1c9773fc07031e260b016c514c92,基于LDAP的统一身份认证系统设计与实现

    摘要: 随着IT技术和网络技术的蓬勃发展,各种基于网络的应用系统已在当前的商业环境中大量存在.因商业应用业务需要,用户每天可能需要登录到许多不同的应用系统.为保证安全性,通常各系统均要求对用户进行身份 ...

  5. LDAP服务器ca系统,基于LDAP的统一身份认证系统与CA认证的集成.pdf

    基于LDAP的统一身份认证系统与CA认证的集成 , 第 33 卷 第 8 期 宜春学院学报 Vol. 33 No. 8 2011 年 8 月 Journal of Yichun College Aug ...

  6. java单点登录统一认证,JEECG 集成KiSSO单点登录实现统一身份认证

    JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...

  7. 构建基于分布式SOA架构的统一身份认证体系

    摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...

  8. cas如何实现多系统间的相互认证_统一身份认证和单点登录的区别

    首先大家会遇到这样一个问题,统一身份认证和单点登录的概念是什么? 百度百科对统一身份认证的定义 所谓身份认证,就是判断一个用户是否为合法用户的处理过程.最常用的简单身份认证方式是系统通过核对用户输入的 ...

  9. FreeIPA 统一身份认证实现

    1.FreeIPA 简介 FreeIPA是一个用于Linux/Unix环境开源的身份管理系统,提供集中式帐户管理和身份验证,与Windows Active Directory或LDAP的作用类似.Fr ...

  10. 分布式系统统一身份认证

    最近要做我们这边电信下面的信息港的分布式统一认证,一开始挺一筹莫展的,现在总算有点思路了,看了北大,清华,东大等的教育网设计方案,发现他们一般都是用J2EE+webservice,我用的是.net+W ...

最新文章

  1. DevOps和SRE有什么不同,每个意味着什么
  2. python 装饰器装饰类_5分钟的Python装饰器指南
  3. gdb 调试 TuMediaService
  4. Python入门学习笔记(3)
  5. 《Python Cookbook(第3版)中文版》——1.5 实现优先级队列
  6. MongoDB,分组,聚合
  7. 【硬件】存储的RAID技术详解
  8. 测视力距离5米还是3米_装B冷知识 | 小孔镜为什么可以提高视力?
  9. JSP脚本连接数据库
  10. 重启路由器可以换IP吗
  11. 深度置信网络学习总结
  12. MISRA C-2012规则中文版
  13. java 微博发布时间_java 对新浪微博微博的发表时间解析
  14. 2018年度中国IT行业杰出人物奖出炉
  15. 【noip模拟赛1】古韵之鹊桥相会(最短路)
  16. Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足的最好解决办法。
  17. 汽车多媒体主机接口EMC设计
  18. 北京大学可视化发展前沿暑期学校第四讲
  19. java 如何使用ocr_Java使用tess4J进行OCR图像识别
  20. nowcoder15162 小H的询问

热门文章

  1. 大数据学习之大数据概述
  2. ArcGIS Pro + PS 矢量化用地规划图
  3. STM32F107之CAN配置
  4. 读书笔记《TAOCP》 V1 S1.1
  5. 全球及中国级联(模块化)流水线行业研究及十四五规划分析报告
  6. 质点碰撞和卢瑟福公式
  7. Java 验证码识别(1)使用 Tess4J 进行 OCR 识别
  8. 人脸检测——FDDB数据集评估
  9. 【Java】按要求编程输出2018年日历
  10. 【常见手机操作系列】开启微信收款语音功能