java 连接ldap_ldap java 连接demo

public class LDAPHelper {

/**

* LDAP可以理解为一个多级目录,这里,表示要连接到那个具体的目录

*/

private final String baseDn = "ou=People,dc=changyeyi,dc=com";

private LdapContext ctx = null;

private final Control[] connCtls = null;

private void connect() {

Hashtable env = new Hashtable<>();

String factory = "com.sun.jndi.ldap.LdapCtxFactory";

env.put(Context.INITIAL_CONTEXT_FACTORY, factory);

String url = "ldap://192.168.31.178:389/";

env.put(Context.PROVIDER_URL, url + baseDn);

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

String root = "cn=admin,dc=changyeyi,dc=com";

//管理员dn

env.put(Context.SECURITY_PRINCIPAL, root);

// 管理员密码

env.put(Context.SECURITY_CREDENTIALS, "123456");

try {

ctx = new InitialLdapContext(env, connCtls);

System.out.println( "连接成功" );

} catch (javax.naming.AuthenticationException e) {

System.out.println("连接失败:");

e.printStackTrace();

} catch (Exception e) {

System.out.println("连接出错:");

e.printStackTrace();

}

}

private void closeContext(){

if (ctx != null) {

try {

ctx.close();

}

catch (NamingException e) {

e.printStackTrace();

}

}

}

/**

* dn就是目标名字+当前目录名字

*/

private String getUserDN(String uid) {

String userDN = "";

connect();

try {

SearchControls constraints = new SearchControls();

constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

//第一个参数是从哪个目录下开始查,因为连接的url里已经指定了ou=People,dc=gosun,dc=com,所以这里填""即可

//第二个参数是查询条件,uid、email等,都是ldap中存放的参数

NamingEnumeration en = ctx.search("", "uid=" + uid, constraints);

if (en == null || !en.hasMoreElements()) {

System.out.println("未找到该用户");

}

while (en != null && en.hasMoreElements()) {

SearchResult obj = en.nextElement();

if (obj != null) {

SearchResult si = obj;

userDN += si.getName();

userDN += "," + baseDn;

} else {

System.out.println((Object) null);

}

}

} catch (Exception e) {

System.out.println("查找用户时产生异常。");

e.printStackTrace();

}

return userDN;

}

/**

* 通过uid获取dn,然后连接验证

*/

public boolean authentication(String uid, String password) {

boolean valide = false;

String userDN = getUserDN(uid);

try {

ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);

ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);

ctx.reconnect(connCtls);

System.out.println(userDN + " 验证通过");

valide = true;

} catch (AuthenticationException e) {

System.out.println(userDN + " 验证失败");

System.out.println(e.toString());

} catch (NamingException e) {

System.out.println(userDN + " 验证失败");

}

closeContext();

return valide;

}

public boolean addUser(String usr, String pwd,String uid,String description) {

try {

connect();

BasicAttributes attrsbu = new BasicAttributes();

BasicAttribute objclassSet = new BasicAttribute("objectclass");

objclassSet.add("inetOrgPerson");

attrsbu.put(objclassSet);

attrsbu.put("sn", usr);

attrsbu.put("cn", usr);

attrsbu.put("uid", uid);

attrsbu.put("userPassword", pwd);

attrsbu.put("description", description);

//这里指定目录名字,可以用uid=/cn=,如uid=changyeyi,或者cn=yaoji

ctx.createSubcontext("uid="+uid+"", attrsbu);

return true;

} catch (NamingException ex) {

ex.printStackTrace();

}

closeContext();

return false;

}

public static void main(String[] args) {

LDAPHelper ldap = new LDAPHelper();

/**

* 用户认证

*/

/*if(ldap.authentication("changyeyi", "changyeyi")){

System.out.println( "该用户认证成功" );

}*/

/**

* 用户添加

*/

ldap.addUser("emma","emma","emma_uid","测试");

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask开发restful api系列(1)

在此之前&#xff0c;向大家说明的是&#xff0c;我们整个框架用的是flask sqlalchemy redis。如果没有开发过web&#xff0c;还是先去学习一下&#xff0c;这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉&#xff0c;我建议先到这个网站简单学习一下&am…

Apache Commons Lang StringUtils

因此&#xff0c;认为最好谈论我喜欢的另一个Java库。 它已经存在了一段时间&#xff0c;也许不是最令人兴奋的库&#xff0c;但是它非常有用。 我可能每天都使用它。 org.apache.commons.lang.StringUtils StringUtils是Apache Commons Lang&#xff08; http://commons.apac…

JEE7:展望新时代

计划于2012年下半年发布的Java EE 7预计的JSR都已启动并正在运行。 Java EE 7发行版是日期驱动的&#xff0c;它将反映该行业迁移到云中时不断变化的需求&#xff1a;任何未准备就绪的内容将推迟到Java EE 8中使用 。 这是Java EE 7平台中不同规范的关键功能的更新和摘要。 1。…

Cocos2d-JS项目之UI界面的优化

测试环境&#xff1a; iphone4、iOS6.1.2、chrome 37.2062.60&#xff0c;Cocos2d-js 3.6 之前写了不少&#xff0c;实际项目也按这个去优化了&#xff0c;也有效果&#xff0c;但到最后才发现&#xff0c;尼玛&#xff0c;之前都搞错了&#xff0c;之所以有效果是歪打正着。。…

java数_java大数

java大数还是很好用的&#xff01;基本加入&#xff1a;import java.math.BigInteger;import jave.math.BigDecimal;分别是大数和大浮点数。首先读入可以用&#xff1a;Scanner input new Scanner(System.in);BigInteger a input.nextBigInteger();这样读还是很方便的当然还有…

【Qt之Quick模块】6. QML语法详解_2类型系统

描述 在QML文档中对象层次结构的定义中可能使用的类型可以来自各种来源。它们可能是: 由QML语言原生提供通过QML模块通过c注册由QML模块作为QML文档提供 此外&#xff0c;应用程序开发人员可以通过直接注册c类型&#xff0c;或者通过在QML文档中定义可重用的组件(然后可以导…

JS显示当前时间(包含农历时间)

时间格式&#xff1a; JavaScript代码&#xff1a; var sWeek new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");var dNow new Date();var CalendarData new Arra…

Maven原型创建技巧

我最近需要为姜黄SOA项目创建一些Maven原型。 对于不了解的人来说&#xff0c; Maven原型是一种基于一些预先罐装的项目模板生成项目的方法。 对于当前的姜黄SOA原型&#xff0c;它将创建一个多模块Maven项目&#xff0c;该项目包含Interface和Service项目以及基本的WSDL和适当…

MyBatis操作指南-与Spring集成(基于注解)

转载于:https://www.cnblogs.com/weilu2/p/mybatis_spring_integration_basic_on_annotation.html

Windows mysql boost_Win7下Boost库的安装

Boost库是C领域公认的经过千锤百炼的知名C类库&#xff0c;涉及编程中的方方面面&#xff0c;简单记录一下使用时的安装过程1.boost库的下载boost库官网主页&#xff1a;www.boost.org2.安装将下载的压缩包解压到指定的目录3.建立编译工具bjam.exe在源码目录下执行bootstrap.ba…

5.2与终端进行对话

Linux提供了一个特殊的设备 /dev/tty &#xff0c;该设备始终是指向当前终端或者当前的登录会话。 FILE* output fopen("/dev/tty", "w"); //向终端写入字符串 fprintf(output, "%s\n", "world"); FILE* input fopen("/dev/tty…

JVM:如何分析线程转储

本文将教您如何分析JVM线程转储&#xff0c;并查明问题的根本原因。 从我的角度来看&#xff0c;线程转储分析是掌握Java EE生产支持的任何个人最重要的技能。 您可以从线程转储快照中获取的信息量通常远远超出您的想象。 我的目标是与您分享我在过去10年中积累的有关线程转储分…

极光推送JPush的快速集成

首先到极光推送的官网上创建一个应用&#xff0c;填写对应的应用名和包名。 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置&#xff0c;然后要注意的是.so文件的放置位置&#xff1a; 在main目录下新建一个jniLibs文件夹&#xff0c;放在这个文件夹…

c遗传算法的终止条件一般_Matlab2 :Matlab遗传算法(GA)优4~-r-具箱是基于基本操作 联合开发网 - pudn.com...

Matlab2所属分类&#xff1a;matlab例程开发工具&#xff1a;PDF文件大小&#xff1a;115KB下载次数&#xff1a;76上传日期&#xff1a;2007-09-07 20:04:29上 传 者&#xff1a;钱广说明&#xff1a; &#xff1a;Matlab遗传算法(GA)优4~-r-具箱是基于基本操作及终止条件、二…

用程序输出表格

做应用程序的时候经常需要输出excel表格&#xff0c;除了不同语言接口完善程度不同的麻烦以及要添加各种外部引用的麻烦之外还要考虑应用环境不同的office版本的问题&#xff0c;实在麻烦 当只需要输出数据&#xff0c;不管颜色什么的的话&#xff0c;有个避免上述麻烦的办法就…

elk系列1之入门安装与基本操作

preface 我们每天都要查看服务器的日志&#xff0c;一方面是为了开发的同事翻找日志&#xff0c;另一方面是巡检服务器查看日志&#xff0c;而随着服务器数量以及越来越多的业务上线&#xff0c;日志越来越多&#xff0c;人肉运维相当痛苦了&#xff0c;此时&#xff0c;参考现…

Java 7 –反编译项目硬币

大家好&#xff0c;该是从2012年开始写作的时候了。正如您在其他博客中可能已经看到的那样&#xff0c;有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松&#xff1a;Diamond运算符&#xff0c;Switchs中的Strings&#xff0c;尝试使用资源&#xff0c;多次捕获等 …

git安装后找不见版本_无法安装最新版本的Gitlab

这个问题不是代码,而是Gitlab的安装.我现在试图安装Gitlab几天没有成功.实际上,很久以前,他们提出了使用wget的方法非常好,但由于我们必须使用Curl的方法,所以不可能比下载更进一步.在Ubuntu 14.04机器上,以下命令有效&#xff1a;curl https://packages.gitlab.com/install/re…

在Excel表里面插入背景图

工作中我们会经常用到MS Excel&#xff0c;通常我们打开MS Excel&#xff0c;里面的工作表都是空白单调的背景。当然了&#xff0c;MS Excel可以在工作簿里面插入背景图片。那么问题来了&#xff0c;如果你没有安装Microsoft Office&#xff0c;该如何在Excel文件里面插入好看的…

Java 7:复制和移动文件和目录

这篇文章是我关于Java 7 java.nio.file软件包的系列文章的继续&#xff0c;这次涵盖了文件的复制和移动以及完整的目录树。 如果您曾经对Java缺少copy和move方法感到沮丧&#xff0c;那么请继续阅读&#xff0c;以免麻烦。 涵盖范围中包括非常有用的Files.walkFileTree方法。 但…