หลายครั้งเมื่อเราสร้างระบบเราจะสร้างระบบการจัดการผู้ใช้ด้วยตนเองซึ่งไม่ยากสำหรับนักพัฒนา อย่างไรก็ตามเมื่อเราต้องการรักษาระบบที่แตกต่างกันหลายระบบและผู้ใช้เดียวกันจะถูกใช้ข้ามระบบหากแต่ละระบบเก็บรักษาข้อมูลผู้ใช้ของตัวเองการซิงโครไนซ์ของข้อมูลผู้ใช้จะกลายเป็นปัญหามากขึ้นและมันจะลำบากมากสำหรับผู้ใช้เอง เป็นเรื่องง่ายที่จะทำให้รหัสผ่านที่ไม่สอดคล้องกันของระบบที่แตกต่างกัน หากเราแนะนำ LDAP ในเวลานี้เพื่อจัดเก็บข้อมูลพื้นฐานของผู้ใช้จากส่วนกลางและให้การอ่านและเขียนแบบรวมและกลไกการตรวจสอบและกลไกการตรวจสอบแล้วปัญหาดังกล่าวจะง่ายต่อการแก้ปัญหา มาพูดคุยเกี่ยวกับวิธีการเข้าถึงเซิร์ฟเวอร์ LDAP เมื่อเราใช้ Spring Boot เพื่อพัฒนา
บทนำสู่ LDAP
LDAP (โปรโตคอลการเข้าถึงไดเรกทอรีน้ำหนักเบา) เป็นบริการข้อมูลที่ให้บริการไดเรกทอรี บริการไดเรกทอรีเป็นระบบฐานข้อมูลพิเศษที่ได้รับการปรับปรุงโดยเฉพาะสำหรับการอ่านการเรียกดูและการดำเนินการค้นหา โดยทั่วไปไดเรกทอรีจะใช้เพื่อให้มีข้อมูลเชิงพรรณนาข้อมูลที่อิงกับคุณลักษณะและรองรับความสามารถในการกรองที่ดีและซับซ้อน โดยทั่วไปไดเรกทอรีไม่สนับสนุนการจัดการธุรกรรมที่ซับซ้อนหรือกลยุทธ์การหมุนเวียนสำหรับฐานข้อมูลทั่วไปที่ต้องใช้การดำเนินการอัปเดตจำนวนมาก การอัปเดตของบริการไดเรกทอรีโดยทั่วไปนั้นง่ายมาก ไดเรกทอรีประเภทนี้สามารถจัดเก็บข้อมูลต่าง ๆ รวมถึงข้อมูลส่วนบุคคลลิงค์เว็บรูปภาพ JPEG ฯลฯ เพื่อเข้าถึงข้อมูลที่เก็บไว้ในไดเรกทอรีจำเป็นต้องใช้โปรโตคอลการเข้าถึง - LDAP ที่ทำงานบน TCP/IP
ข้อมูลในไดเรกทอรี LDAP ถูกจัดระเบียบตามโครงสร้างต้นไม้และข้อมูลเฉพาะจะถูกเก็บไว้ในโครงสร้างข้อมูลของรายการ (รายการ) รายการเทียบเท่ากับบันทึกของตารางในฐานข้อมูลเชิงสัมพันธ์ รายการคือแอตทริบิวต์ที่มีนามแฝง DN (ชื่อที่โดดเด่น) DN ใช้เพื่ออ้างถึงรายการและ DN เทียบเท่ากับคำหลักในตารางฐานข้อมูลเชิงสัมพันธ์ แอตทริบิวต์ประกอบด้วยประเภท (ประเภท) และหนึ่งค่าหรือมากกว่า (ค่า) ซึ่งเทียบเท่ากับฟิลด์ (ฟิลด์) ในฐานข้อมูลเชิงสัมพันธ์ประกอบด้วยชื่อฟิลด์และชนิดข้อมูล เพื่อประโยชน์ในการดึงข้อมูลประเภทใน LDAP สามารถมีหลายค่ามากกว่าฟิลด์ที่ใช้ในฐานข้อมูลเชิงสัมพันธ์ที่ต้องลดความซ้ำซ้อนของข้อมูลจะต้องไม่เกี่ยวข้อง องค์กรของรายการใน LDAP นั้นถูกจัดระเบียบโดยทั่วไปตามที่ตั้งทางภูมิศาสตร์และความสัมพันธ์ขององค์กรซึ่งใช้งานง่ายมาก LDAP จัดเก็บข้อมูลในไฟล์และเพื่อปรับปรุงประสิทธิภาพฐานข้อมูลไฟล์ที่ใช้ดัชนีสามารถใช้แทนฐานข้อมูลเชิงสัมพันธ์ ตัวอย่างของประเภทคือจดหมายซึ่งค่าจะเป็นที่อยู่อีเมล
ข้อมูล LDAP ถูกเก็บไว้ในโครงสร้างต้นไม้ โดยทั่วไปรากของต้นไม้จะกำหนดประเทศ (C = CN) หรือชื่อโดเมน (DC = COM) และภายใต้องค์กรหนึ่งองค์กร (O = ACME) หรือหน่วยองค์กร (OU = PEOPLE) หน่วยองค์กรอาจมีข้อมูลเช่นพนักงานทุกคนเครื่องพิมพ์ทั้งหมดในอาคาร ฯลฯ นอกจากนี้ LDAP ยังสนับสนุนการควบคุมแอตทริบิวต์ที่สามารถและต้องได้รับการสนับสนุนโดยรายการซึ่งนำไปใช้กับแอตทริบิวต์พิเศษที่เรียกว่า ObjectClass ค่าของแอตทริบิวต์กำหนดกฎบางอย่างที่รายการต้องปฏิบัติตามซึ่งระบุว่าคุณลักษณะใดที่รายการสามารถและควรมีอย่างน้อย ตัวอย่างเช่น: คลาส Object Inetorgperson จำเป็นต้องสนับสนุนแอตทริบิวต์ SN (นามสกุล) และ CN (ชื่อสามัญ) แต่ยังสามารถมีแอตทริบิวต์เสริมเช่นอีเมลหมายเลขโทรศัพท์ ฯลฯ
ตัวย่อ LDAP
การเริ่มต้นตัวอย่าง
หลังจากทำความเข้าใจแนวคิดพื้นฐานของ LDAP เราสามารถเข้าใจพวกเขาเพิ่มเติมได้ผ่านตัวอย่างง่ายๆ!
สร้างโครงการ Basic Spring Boot (หากคุณยังไม่รู้คุณสามารถอ้างถึงบทความทั้งสองนี้: เริ่มต้นใช้งาน 1 หรือเริ่มต้น 2)
แนะนำการพึ่งพาที่สำคัญสองประการใน pom.xml
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Data-ldap </artifactid> </serdency> <cend> <copeid> com.unboundid </groupid>
ในหมู่พวกเขา Spring-Boot-Starter-Data-LDAP เป็นการใช้งานการกำหนดค่าระบบอัตโนมัติ LDAP ที่ห่อหุ้มด้วยสปริงบูต มันขึ้นอยู่กับ Spring-Data-LDAP เพื่อดำเนินการเฉพาะบนเซิร์ฟเวอร์ LDAP
UnboundId-LDAPSDK ส่วนใหญ่ใช้เพื่อใช้เซิร์ฟเวอร์ LDAP แบบฝังที่นี่เพื่อดำเนินการทดสอบดังนั้นขอบเขตจึงถูกตั้งค่าเป็นทดสอบ ในแอปพลิเคชันจริงเรามักจะเชื่อมต่อกับเซิร์ฟเวอร์ LDAP ที่ปรับใช้จริงและเป็นอิสระดังนั้นจึงไม่จำเป็นต้องมีการพึ่งพานี้
สร้างไฟล์ LDAP-server.ldif ในไดเรกทอรี SRC/Test/Resources เพื่อจัดเก็บข้อมูลพื้นฐานของเซิร์ฟเวอร์ LDAP สำหรับโปรแกรมในภายหลังเพื่อเข้าถึง
DN: DC = DIDISPACE, DC = ComObjectClass: TopObjectClass: DomaIndn: OU = ผู้คน, DC = DIDISPACE, DC = ComObjectClass: topObjectClass: rogsanizationAnitou: peoplecters: uid = ben, ou = people, dc = didispace, dc = comobjectclass inetorgpersoncn: didisn: zhaiyongchaouid: didiuserpassword: {sha} nfcebwjxfalbhhg1qk5uu4trbvq =ผู้ใช้พื้นฐานถูกสร้างขึ้นที่นี่ด้วยชื่อจริง Zhaiyongchao และชื่อ Didi ที่ใช้กันทั่วไป ในโปรแกรมที่ตามมาเราจะอ่านข้อมูลนี้ สำหรับคำอธิบายเนื้อหาเพิ่มเติมคุณสามารถเรียนรู้ LDAP ในเชิงลึกเพื่อทำความเข้าใจ ฉันจะไม่อธิบายมากเกินไปที่นี่
การเพิ่มการกำหนดค่า LDAP แบบฝังตัวใน Application.properties
Spring.ldap.embedded.ldif = ldap-server.ldifspring.ldap.embedded.base-dn = dc = didispace, dc = com
ใช้การใช้งานขั้นพื้นฐานของ Spring-Data-LDAP เพื่อกำหนดการแมปความสัมพันธ์ระหว่างคุณสมบัติใน LDAP และเอนทิตีที่กำหนดไว้ใน Java และที่เก็บข้อมูลที่สอดคล้องกัน
@data @entry (base = "ou = people, dc = diidspace, dc = com", objectClasses = "inetorgperson") บุคคลชั้นเรียนสาธารณะ {@id ชื่อส่วนตัวชื่อ; @dnattribute (value = "uid", index = 3) สตริงส่วนตัว uid; @attribute (name = "cn") สตริงส่วนตัวสามัญชื่อสามัญ; @attribute (name = "sn") Suername สตริงส่วนตัว; สตริงส่วนตัว userpassword;} ส่วนต่อประสานสาธารณะ personrepository ขยาย crudrepository <person, name> {}หลังจากคำจำกัดความข้างต้นวัตถุบุคคลนั้นได้รับการแมปกับเนื้อหาการจัดเก็บ LDAP เราจำเป็นต้องใช้บุคคลเพื่ออ่านและเขียนเนื้อหา LDAP ได้อย่างง่ายดาย
สร้างกรณีทดสอบหน่วยเพื่ออ่านข้อมูลผู้ใช้ทั้งหมด:
@runwith (SpringRunner.class) @springboottestpublic Class Applicationtests {@autoWired Personal Personal PersonRepository; @Test โมฆะสาธารณะ findAll () พ่นข้อยกเว้น {personRepository.findall (). foreach (p -> {system.out.println (p);}); -หลังจากเริ่มกรณีการทดสอบนี้เราจะเห็นว่าข้อมูลผู้ใช้ที่เพิ่งเก็บรักษาไว้ใน LDAP-server.ldif เป็นเอาต์พุตในคอนโซล:
2018-01-27 14: 25: 06.283 WARN 73630 --- [Main] Osldap.odm.core.impl.objectmetadata: ควรประกาศบุคคลชั้นเรียนสุดท้าย
บุคคล (id = uid = ben, ou = people, dc = didispace, dc = com, uid = ben, commonname = didi, suername = zhaiyongchao, UserPassword = 123,83,72,65,125,110,70,67,101,98,87,106,120,102,97,76,98,72,72,71,81,81,107,53,85,85,85,116,116,116,114,118,118,
เพิ่มผู้ใช้
ด้วยตัวอย่างเริ่มต้นข้างต้นหากคุณสามารถทำให้เสร็จได้อย่างอิสระเป้าหมายพื้นฐานของการใช้งาน LDAP ในสปริงบูตเสร็จสมบูรณ์แล้ว
หากคุณรู้ว่าข้อมูลฤดูใบไม้ผลิเพียงพอมันไม่ยากที่จะจินตนาการว่าโครงการย่อยนี้ภายใต้มันจะต้องปฏิบัติตาม repsitory abstraction ดังนั้นเราสามารถใช้บุคคลที่กำหนดไว้ข้างต้นเพื่อใช้งานการดำเนินงานได้อย่างง่ายดายเช่นรหัสต่อไปนี้เพื่อเพิ่มผู้ใช้ใน LDAP ได้อย่างง่ายดาย:
บุคคล = บุคคลใหม่ (); person.setuid ("uid: 1"); person.setSuername ("AAA"); person.setCommonName ("AAA"); person.setUserPassword ("123456"); personrepository.save (บุคคล);หากคุณต้องการดำเนินการเพิ่มเติมคุณสามารถอ้างถึงเอกสารประกอบของ Spring-Data-LDAP เพื่อใช้งาน
เชื่อมต่อกับเซิร์ฟเวอร์ LDAP
ในตัวอย่างในบทความนี้ใช้เซิร์ฟเวอร์ LDAP แบบฝัง ในความเป็นจริงวิธีนี้ จำกัด เฉพาะการทดสอบและการพัฒนาในท้องถิ่นของเรา ในสภาพแวดล้อมจริงเซิร์ฟเวอร์ LDAP จะต้องถูกปรับใช้อย่างอิสระ
ในแพ็คเกจสปริงบูตเราต้องกำหนดค่าพารามิเตอร์ต่อไปนี้เพื่อเชื่อมต่อตัวอย่างด้านบนกับ LDAP ระยะไกลแทน LDAP แบบฝัง
spring.ldap.urls = ldap: // localhost: 1235spring.ldap.base = dc = didispace, dc = comspring.ldap.username = didispacespring.ldap.password = 123456
รหัสของบทความนี้
คุณสามารถตรวจสอบไดเรกทอรีบทที่ 3-2-10 ผ่านที่เก็บสองแห่งต่อไปนี้:
GitHub: https://github.com/dyc87112/springboot-learning/
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น