java jndi ldap_浅谈ldap以及jndi

现在很多企业中都会用到LDAP,一个常见的例子,假如一个大型企业,有很多linux服务器,企业员工可以登录到这些linux服务器中做开发以及测试,但员工是否需要每台linux服务器都需要一个帐号,还是所有linux服务器公用一个帐号呢?  还有一种情况,假如企业内容有很多用户管理系统,比如绩效系统,请假系统,办公系统等等,那么员工在使用这些系统时是否可以共用一个统一的帐号呢?  这两种情况的答案是肯定的,就是使用一个帐号能够将所有这些都搞定!

专业一点说,这两种情况都叫做"统一用户认证"。 如何来实现它呢,目前比较流行的就是使用ldap.

说到Ldap,有几个容易混淆的概念:

ldap协议,跟http/ftp一样,属于应用层协议,基于tcp/ip的,通过这个协议就能很方便地跟ldap服务器通信。

ldap服务器,ldap服务器可以是一台专门的机器,从本质上讲,它必须包含两个东西:一个是处理ldap协议的程序,大概要解析ldap协议,提取ldap消息内容(是查询/修改还是其他...)。 另一个就是集中的资源,比如员工的账户信息。

ldap客户端,就是需要统一认证的地方,比如用户管理登录时的逻辑。

这里不打算探讨ldap协议,因为目前有现成的api已经封装了这些协议,对用户是透明的。对于ldap服务器,只是浅谈下资源是如何存放的? 很多人都说ldap是数据库,其实也可以这么理解,因为ldap有一个存放资源的地方,跟数据库类似。但资源存放的方式却与数据库不同(这里的数据库指的是关系型数据库)。 了解数据库的人都知道,rdbms是以表为单位,表跟表之间是相互关联的。而ldap中的资源却是层次型的,是以树的方式进行存储的,这样做的目的是为了便于查询。这是ldap与数据库最大的不同。

e.g.                                                                单位名称

部门A                    部门B                  ....

账户A1 账户A2...            账户B1 ....

有了树这种结构,对资源的查找就会非常方便。

在实际的使用中,如何来配置这些资源呢? 可以通过一些GUI来实现,比如ldap browser/open ldap等工具进行配置,可以把它们想象成db2 control center 或者 oracle Sql*Plus,通过这些工具,可以配置这棵树,查询/修改这棵树等

对于编程开发人员来说,如何来对ldap中的资源进行操作呢? 这里主要介绍一下java中JNDI.

JNDI:java命名和目录接口,包含两个方面,命名接口和目录接口。

命名接口:与DNS类似,给定一个名字,返回一个值。

目录接口:如何理解目录呢? 其实就是一颗树,可以参照linux文件系统,每个文件可以是目录或者就是文件本身,树的节点可以是叶子节点也可能是根节点。也就是说,给定一个名字,返回的值是一颗树。可以认为目录接口包含命名接口(当这棵树只有根节点时)。

JNDI API是J2SE中的标准API,是通用的API。JNDI中包括5个包:javax.naming,javax.naming.directory,javax.naming.event,javax.naming.ldap,javax.naming.spi。

常用的JNDI操作有:bind,unbind,lookup,rename,NamingEnumeration listBindings,NamingEnumeration list。

使用JNDI来访问命名服务或目录服务,操作步骤如下:

1、建立一个HashTable,包含定义所希望使用的JNDI服务的属性,所希望连接的LDAP服务器IP地址以及端口;

2、将与认证成用户登录有关的任何信息添加到散列表中;

3、创建初始context对象。如果访问命名服务,则使用InitialContext类,如果访问目录服务,则要使用InitialDirContext类;

4、使用刚才得到的context对象执行所需的操作,如添加新的条目或者搜索条目;

5、完成操作后关闭context对象。

欢迎批评指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值