本教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或不推荐选项的信息,请参阅JDK发布说明。
国际化通过国际字符集(ISO 10646)来表示协议元素中的字符串(例如DNs)。与版本2相比,版本3还使用UTF-8来编码其字符串。
除了匿名、简单(明文密码)认证外,LDAP v3还使用简单认证和安全层(SASL)认证框架(RFC 2222)允许使用不同的认证机制与LDAP一起使用。SASL规定了一种挑战-响应协议,用于认证的目的,在客户端和服务器之间交换数据。
目前定义了几种SASL机制:DIGEST-MD5、CRAM-MD5、Anonymous、External、S/Key、GSSAPI和Kerberos v4。LDAP v3客户端可以使用任何这些SASL机制,前提是LDAP v3服务器支持它们。此外,可以在不必更改LDAP的情况下使用新的(尚未定义的)SASL机制。
引用是服务器发送回客户端的信息,指示所请求的信息可以在另一个位置(可能在另一个服务器)找到。在LDAP v2中,服务器应处理引用并不将其返回给客户端。这是因为处理引用可能非常复杂,从而导致客户端更复杂。随着服务器的构建和部署,发现引用很有用,但是不多的服务器支持服务器端引用处理。因此,找到了一种方法来改进协议,使其能够返回引用。这是通过将引用放在“部分结果”错误响应的错误消息中来实现的。
LDAP v3明确支持引用,并允许服务器直接将引用返回给客户端。本课程不涵盖引用,但您可以随时参考JNDI教程了解如何管理应用程序中的引用。
LDAP等常见协议对于确保所有目录客户端和服务器“说同一种语言”非常有用。当在网络中部署许多不同的目录客户端应用程序和目录服务器时,它也非常有用,以便所有这些实体都能够讨论相同的对象。
一个目录模式指定了一个目录可能具有的对象类型以及每种对象类型可能具有的强制和可选属性,LDAP v3根据X.500标准为网络中常见的对象(如国家、地点、组织、用户/人员、组和设备)定义了一个模式(RFC 2252和RFC 2256)。它还定义了一种客户端应用程序访问服务器模式的方法,以便了解特定服务器支持的对象类型和属性。
LDAP v3进一步定义了一组用于表示属性值的语法(RFC 2252)。如果需要访问模式的Java应用程序,请参考JNDI教程。
除了预定义的操作(如“搜索”和“修改”)之外,LDAP v3还定义了一种“扩展”操作。扩展操作以请求作为参数,并返回一个响应。请求包含标识符,用于标识请求和请求的参数。响应包含执行请求的结果。扩展操作请求/响应的一对被称为一个扩展。例如,可以有一个用于启动TLS的扩展,该扩展是客户端向服务器发送的启动TLS协议的请求。
这些扩展可以是标准的(由LDAP社区定义)或专有的(由特定目录供应商定义)。如果需要编写使用扩展的应用程序,请参考JNDI教程。
另一种添加新功能的方法是使用控制。LDAP v3允许通过使用控制来修改任何操作的行为。可以随任何操作一起发送任意数量的控制,并且可以随其结果返回任意数量的控制。例如,您可以在“搜索”操作中发送一个排序控件,告诉服务器按“name”属性对搜索结果进行排序。