วันพฤหัสบดีที่ 13 กันยายน พ.ศ. 2550

วิธีการเขียนข้อมูลเรียก LDAP

สำหรับคนที่ไม่รู้ว่า LDAP คืออะไร สามารถอ่านได้ที่นี่
1. ให้ใช้วิธีเรียกจากบน UNIX ด้วยคำสั่ง

ldapsearch -D cn=[username]
-w [password] -h [ip address] -p [port] -s sub -b [service],o=[organization],c=[country]
'objectClass=*'

Username = ชื่อสำหรับทำการเข้า LDAP
Password = Password สำหรับเข้า LDAP
IP Address = IP สำหรับเข้า LDAP
Port = Port ของ LDAP
Service = ที่เราจะเข้าไปดูซึ่งวิธีเข้าไปดูนั้นจะเรียงจากชั้นในสุดไปถึงชั้นนอกสุด
Organization = Config LDAP
Country = Config LDAP

Example
ldapsearch -D cn=sample -w sample1 -h xxx.xxx.xxx.xxx -p xxx -s sub -b taoService=prepaid,serviceName=subProfile,msisdn=xxxxxxxxx, domainName=msisdn, o=xxx,c=TH 'objectClass=*'

ภาพโครงสร้างคร่าวๆ ของ LDAP

2. ถ้าเรียกแล้วข้อมูลขึ้นดังตัวอย่าง โดยที่ไม่มี Error ใดๆ ถือว่าเราสามารถที่จะเรียกได้

dn: msisdn=66xxxxxxxxx,domainName=msisdn,O=xxx,C=TH
msisdn: 66xxxxxxxxx
objectClass: subscriber
dn: serviceName=subProfile,msisdn=66xxxxxxxxx, domainName=msisdn, O=xxx ,C=TH
serviceName: subProfile
objectClass: subProfile
spImsi: 6223904495254321
spIccid: 00000000000000000000
spPricePlan:
spProvDate: 04012002
spAccountType: POS
spSubType:
spAccountCateg:
spSubStatus: A
spLanguage: english
spSKSegment:
spSKMobileType:
spRBTService: FALSE
spSupService: 000000000000000000000000

3. วิธีการเรียกด้วยจาวา จะทำดังนี้


Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://IP:PORT/o=organization,c=country");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=username,o=organization,c=country");
env.put(Context.SECURITY_CREDENTIALS, password);
InitialDirContext initNamingContext = new InitialDirContext(env);
Attributes attrs = initNamingContext.getAttributes(service);
attrs.get(ชื่อที่ต้องการจะดึงขึ้นมา).get());
ชื่อที่ต้องการจะดึงขึ้นมานั้นจะเป็นคล้ายๆ แบบที่ 2 เช่น spSubType เป็นต้น


ใช้สำหรับ Config Timeout ให้กับ LDAP โดย put com.sun.jndi.ldap.connect.timeout ลงไปด้วย
เช่น env.put("com.sun.jndi.ldap.connect.timeout", "1000");
และสำหรับ Config Read Timeout โอยเพิ่ม put com.sun.jndi.ldap.read.timeout

1 comments:

ไม่ระบุชื่อ กล่าวว่า...

เยี่ยมยอดครับ คุณเขียนบทความต่างๆได้ ตรงใจผมจริงๆ