关于为什么要使用LDAP去访问MQ, 而不是直接访问,其理由我就不啰嗦了,有兴趣的可以去Google下。最直接的原因有至少如下两条(欢迎补充):
1. 客户端不需要去记MQ的账号,密码,只要有一个LDAP目录的访问权限,其下面所有的资源都可以访问。
2. MQ躲在LDAP Server后面,可以随时变化,对客户端这种变化是透明的。
下面说下具体实施步骤,
1. 安装LDAP Server。 我使用的是OpenLDAP2.4.26 可以到官方网站下载。具体安装方法略,网上很多,推荐一篇http://blog.chinaunix.net/space.php?uid=20652253&do=blog&id=1906570。
如果想让其随机器自启动,可以在/etc/rc.local加入一行
su root -lc "/usr/local/openldap/libexec/slapd &"
2. 加入Java schema,
We must edit the slapd.conf file. After the line:
include /usr/local/etc/openldap/schema/core.schema
add the schema for java objects:
include /usr/local/etc/openldap/schema/java.schema
注意:
a. 具体在那个目录要看OpenLDAP的安装目录,以及其版本。
b. 必须要改下 java.schema, 否则会有错误 LDAP: error code 65 - object class 'javaContainer' requires attribute 'cn']
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1
NAME 'javaContainer'
DESC 'Container for a Java object'
SUP top
STRUCTURAL
MUST cn )
用#号将“MUST cn )” 注释掉,用MAY ( o $ cn) )替换它
替换后类似以下内容:
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1
NAME 'javaContainer'
DESC 'Container for a Java object'
SUP top
STRUCTURAL
MAY ( o $ cn) )
3. 安装 Sonic MQ server。我装的是比较老的6.1, 官网可以下载。安装配置简单。Windows下就是Next, Next..
4. 增加一个object 到 LDAP Server, 我使用Java 代码做的,
import javax.naming.Context;
import javax.naming.NameAlreadyBoundException;
import javax.naming.directory.*;
import java.util.*;
public class MakeRootContext {
final static String rootCtx = "o=SonicMQ,dc=cyber,dc=com";
public static void main(String[] args) {
// set up environment to connect to LDAP
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.0.23:389/");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=stony,dc=zhang");
env.put(Context.SECURITY_CREDENTIALS, "12345");
try {
// obtain initial directory context using the environment
DirContext initialctx = new InitialDirContext(env);
initialctx.createSubcontext(rootCtx);
} catch (NameAlreadyBoundException nabe) {
System.err.println(rootCtx + " has already been bound!");
} catch (Exception e) {
System.err.println(e);
}
}
}
5. 必须在Sonic MQ控制台,把ConnectionFaction,以及Destination注册到LDAP Server, 过程如下,
第一步:
第二步,
第三步:
6.最后,我们用代码验证一下。能通过LDAP得到ConnectionFactotry, 以及Queue, 并且能发送消息到MQ.
import java.util.Hashtable;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import progress.message.jclient.QueueConnectionFactory;
public class LDAPConnect {
public LDAPConnect() throws Exception {
// Obtain a JNDI connection
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,
"ldap://192.168.0.23:389/o=SonicMQ,dc=stony,dc=zhang");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=stony,dc=zhang");
env.put(Context.SECURITY_CREDENTIALS, "12345");
DirContext ctx = null;
try {
ctx = new InitialDirContext(env);
// Lookup a JMS connection factory
QueueConnectionFactory conFactory = (QueueConnectionFactory) ctx.lookup("cn=cltQCF");
QueueConnection connection = conFactory.createQueueConnection();
QueueSession session=connection.createQueueSession(true, 10);
Queue queue= (Queue)ctx.lookup("cn=wfacRCAccess");
QueueSender sender=session.createSender(queue);
Message msg = session.createTextMessage("test");
sender.send(msg);
session.commit();
connection.close();
System.out.println("connected");
// System.exit(0);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
try {
LDAPConnect simpleConnect = new LDAPConnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
检查MQ Server是否收到消息,
测试完成。
----------------------------------------------------------------------
张瑜,Mybeautiful, zhangyu0182@sina.com.
- 大小: 26.2 KB
- 大小: 17.1 KB
- 大小: 29.3 KB
- 大小: 23.1 KB
分享到:
相关推荐
标题 "ldap 访问AD测试" 涉及的核心知识点是使用LDAP(轻量级目录访问协议)与Active Directory(AD)进行交互。这通常在企业环境中用于身份验证、授权和用户管理。以下是对这些主题的详细解释: 1. LDAP...
基于SSL的LDAP安全访问AD认证 基于SSL的LDAP安全访问AD认证是指使用SSL(Secure Sockets Layer)协议来保护LDAP(Lightweight Directory Access Protocol)协议与AD(Active Directory)的通信,使得密码在网络中...
svn+ldap+sasl 认证(svn 通过 ldap 用户进行认证...svn+ldap+sasl 认证机制可以确保 svn 服务器的安全性,防止未经授权的访问和操作。同时,ldap 服务器也可以提供集中管理用户信息的功能,方便管理员管理用户信息。
在IT领域,LDAP(Lightweight Directory Access Protocol)是一种用于存储和检索目录信息的标准协议,常用于企业级的...通过以上步骤,你可以在CentOS系统上搭建一个基本的LDAP服务器,并用Java进行数据的访问和管理。
在分布式计算环境中,基于LDAP协议的目录服务正起着越来越...通过降低建立/关闭LDAP连接的开销大幅度 地提高了应用程序访问LDAP的性能,同时通过LDAP连接管理的自动化,实现了一个高效、可靠的LDAP目录访问组件。
1. **目录浏览**:用户可以通过LdapBrowser直观地查看目录结构,包括对象类别、属性和条目。 2. **搜索与过滤**:提供强大的搜索功能,允许用户根据特定条件查找目录中的信息,支持使用 LDAP 查询过滤器。 3. **编辑...
基于LDAP的XML数据访问是一种利用轻型目录访问协议(LDAP)对可扩展标记语言(XML)数据进行表示和访问的方法。LDAP是一种提供分布式目录服务的网络协议,主要用于读取和写入存储在目录数据库中的信息。LDAP目录...
LDAP(轻量级目录访问协议)是一种用于查询和管理分布式目录服务的网络协议,广泛应用于企业环境中的用户身份验证、权限管理和数据共享。LdapBrowser是一款专为开放源代码的OpenLDAP设计的连接工具,帮助管理员便捷...
LDAP的基本概念LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,是一种基于 客户机/服务器模式的目录服务访问协议.其实是一话号码簿,LDAP是一种特殊的数据库。LDAP目录的优势LDAP协议是跨...
- **权限管理**:通过LdapAdmin,管理员可以设置不同用户的访问权限,控制对目录的访问范围。 ### 总结 LdapAdmin作为一款强大的Windows LDAP管理工具,不仅提供了一流的性能和稳定性,还具备丰富的功能,简化了...
通过LdapAdmin,你可以浏览目录结构,创建、编辑和删除对象,如用户、组和其他条目。它还支持执行搜索查询,查看日志,以及进行其他高级操作,如备份和恢复目录。 ### 3. LDAP基础概念 - **DN(Distinguished Name...
LDAP,全称为轻量级目录访问协议(Lightweight Directory Access Protocol),是一种用于访问和管理分布式目录服务的标准网络协议。它主要用于存储和检索用户、组织、资源等信息,广泛应用于身份验证、权限控制、...
`LDAPTemplate`通过配置的方式降低了访问LDAP的复杂度,并且支持Spring框架的一系列特性,比如事务管理等。 ##### 2.2 配置与使用 - **环境准备**:首先需要确保项目中已经包含了Spring框架以及相关的依赖。对于`...
在IT领域,特别是软件开发中,`Delphi`是一个强大的集成开发环境(IDE),它基于Object Pascal编程语言...通过这种方式,Delphi结合LDAP库,可以构建出强大的目录服务应用程序,实现对全球分布式目录的高效管理和查询。
【LDAP(轻量级目录访问协议)的理解与应用】 LDAP是一种用于访问和管理分布式目录服务的协议,主要用于存储和检索用户、组、网络资源等信息。尽管“轻量级”可能让人误解其复杂性,但事实上,LDAP简化了目录服务的...