java ldap userpassword 解密_Spring Boot中使用LDAP來統一管理用戶信息

LDAP簡介

LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的信息服務。目錄服務是一種特殊的數據庫系統,其專門針對讀取,瀏覽和搜索操作進行了特定的優化。目錄一般用來包含描述性的,基于屬性的信息并支持精細復雜的過濾能力。目錄一般不支持通用數據庫針對大量更新操作操作需要的復雜的事務管理或回卷策略。而目錄服務的更新則一般都非常簡單。這種目錄可以存儲包括個人信息、web鏈結、jpeg圖像等各種信息。為了訪問存儲在目錄中的信息,就需要使用運行在TCP/IP 之上的訪問協議—LDAP。

LDAP目錄中的信息是是按照樹型結構組織,具體信息存儲在條目(entry)的數據結構中。條目相當于關系數據庫中表的記錄;條目是具有區別名DN (Distinguished Name)的屬性(Attribute),DN是用來引用條目的,DN相當于關系數據庫表中的關鍵字(Primary Key)。屬性由類型(Type)和一個或多個值(Values)組成,相當于關系數據庫中的字段(Field)由字段名和數據類型組成,只是為了方便檢索的需要,LDAP中的Type可以有多個Value,而不是關系數據庫中為降低數據的冗余性要求實現的各個域必須是不相關的。LDAP中條目的組織一般按照地理位置和組織關系進行組織,非常的直觀。LDAP把數據存放在文件中,為提高效率可以使用基于索引的文件數據庫,而不是關系數據庫。類型的一個例子就是mail,其值將是一個電子郵件地址。

LDAP的信息是以樹型結構存儲的,在樹根一般定義國家(c=CN)或域名(dc=com),在其下則往往定義一個或多個組織 (organization)(o=Acme)或組織單元(organizational units) (ou=People)。一個組織單元可能包含諸如所有雇員、大樓內的所有打印機等信息。此外,LDAP支持對條目能夠和必須支持哪些屬性進行控制,這是有一個特殊的稱為對象類別(objectClass)的屬性來實現的。該屬性的值決定了該條目必須遵循的一些規則,其規定了該條目能夠及至少應該包含哪些屬性。例如:inetorgPerson對象類需要支持sn(surname)和cn(common name)屬性,但也可以包含可選的如郵件,電話號碼等屬性。

LDAP簡稱對應

  • o:organization(組織-公司)
  • ou:organization unit(組織單元-部門)
  • c:countryName(國家)
  • dc:domainComponent(域名)
  • sn:surname(姓氏)
  • cn:common name(常用名稱)

以上內容參考自:LDAP快速入門

入門示例

在了解了LDAP的基礎概念之后,我們通過一個簡單例子進一步理解!

  • 創建一個基礎的Spring Boot項目(如果您還不會,可以參考這兩篇文章:入門1或入門2)
  • 在pom.xml中引入兩個重要依賴
ebd969bacd218aa0144cf98938c8ac31.png

其中,spring-boot-starter-data-ldap是Spring Boot封裝的對LDAP自動化配置的實現,它是基于spring-data-ldap來對LDAP服務端進行具體操作的。

而unboundid-ldapsdk主要是為了在這里使用嵌入式的LDAP服務端來進行測試操作,所以scope設置為了test,實際應用中,我們通常會連接真實的、獨立部署的LDAP服務器,所以不需要此項依賴。

  • 在src/test/resources目錄下創建ldap-server.ldif文件,用來存儲LDAP服務端的基礎數據,以備后面的程序訪問之用。
0f54d4a18864728116802f4182d34d4f.png

這里創建了一個基礎用戶,真實姓名為zhaiyongchao,常用名didi,在后面的程序中,我們會來讀取這些信息。更多內容解釋大家可以深入學習LDAP來理解,這里不做過多的講解。

  • 在application.properties中添加嵌入式LDAP的配置
7414e7fbe733081a89485ad11ea5112d.png
  • 使用spring-data-ldap的基礎用法,定義LDAP中屬性與我們Java中定義實體的關系映射以及對應的Repository
5b654b93f1bb3397f6013931245e12a8.png

通過上面的定義之后,已經將Person對象與LDAP存儲內容實現了映射,我們只需要使用PersonRepository就可以輕松的對LDAP內容實現讀寫。

  • 創建單元測試用例讀取所有用戶信息:
fcd1b5b27ae0ee63541de46306b44e3d.png

啟動該測試用例之后,我們可以看到控制臺中輸出了剛才維護在ldap-server.ldif中的用戶信息:

2018-01-27 14:25:06.283 WARN 73630 --- [ main] o.s.ldap.odm.core.impl.ObjectMetaData : The Entry class Person should be declared finalPerson(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,49,81,107,53,85,85,52,116,114,98,118,81,61)

添加用戶

通過上面的入門示例,如果您能夠獨立完成,那么在Spring Boot中操作LDAP的基礎目標已經完成了。

如果您足夠了解Spring Data,其實不難想到,這個在其下的子項目必然也遵守Repsitory的抽象。所以,我們可以使用上面定義的PersonRepository來輕松實現操作,比如下面的代碼就可以方便的往LDAP中添加用戶:

7288b4814d33e277a895ed210a146f42.png

如果還想實現更多操作,您可以參考spring-data-ldap的文檔來進行使用。

連接LDAP服務端

在本文的例子中都采用了嵌入式的LDAP服務器,事實上這種方式也僅限于我們本地測試開發使用,真實環境下LDAP服務端必然是獨立部署的。

在Spring Boot的封裝下,我們只需要配置下面這些參數就能將上面的例子連接到遠端的LDAP而不是嵌入式的LDAP。

f18fb018ad90f3d8be8b96fe3c307839.png
6aaea0b2d441a324b0c1935fd2a6678c.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第三章之枚舉、注解

2019-01-22內容:枚舉、注解一、自定義一個枚舉類1 public class TestSeason {2 3 public static void main(String[] args) {4 Season spring Season.Spring;5 System.out.println(spring);6 }7 }8 public class Season {9 //將屬性定…

html打開后默認瀏覽器頁面,使用VBA打開默認瀏覽器中的html頁面?

您可以使用Windows API函數ShellExecute來執行此操作:Option ExplicitPrivate Declare Function ShellExecute _Lib "shell32.dll" Alias "ShellExecuteA" ( _ByVal hWnd As Long, _ByVal Operation As String, _ByVal Filename As String, _Op…

數據科學r語言_您應該為數據科學學習哪些語言?

數據科學r語言Data science is an exciting field to work in, combining advanced statistical and quantitative skills with real-world programming ability. There are many potential programming languages that the aspiring data scientist might consider specializi…

Linux平臺不同解壓縮命令的使用方法

作者:郭孝星 微博:郭孝星的新浪微博 郵箱:allenwells163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 一 .tar 解包 tar xvf FileName.tar 打包 tar cvf FileName.tar DirName 注意…

unity中怎么做河流_【干貨】工作中怎么做工業設計的?(一)

最近在找工作,一直在看招聘信息。看到工業設計工資還是蠻高的。應屆畢業生一般是4-6K,1-3年工作經驗是6-8K,3年以后的差不多是8K以上了。我沒有嫉妒羨慕恨,發誓,真的沒有。工業設計已經被重視,未來的道路會…

[易學易懂系列|golang語言|零基礎|快速入門|(一)]

golang編程語言,是google推出的一門語言。 主要應用在系統編程和高性能服務器編程,有廣大的市場前景,目前整個生態也越來越強大,未來可能在企業應用和人工智能等領域占有越來越重要的地位。 本文章是【易學易懂系列|編程語言入門】…

APUE學習之三個特殊位 設置用戶ID(set-user-ID),設置組ID(set-group-ID),sticky...

設置用戶ID(set-user-ID),設置組ID(set-group-ID),stickyset-user-ID: SUID當文件的該位有設置時,表示當該文件被執行時,程序具有文件所有者的權限而不是執行者的權限。這樣說有點繞…

微信調用html退后方法,微信瀏覽器后退關閉頁面

不需要引用 微信jssdk 關閉瀏覽器WeixinJSBridge.invoke(closeWindow, {}, function (res) { });參考:https://mp.weixin.qq.com/wiki/12/7dd29a53f4b55a8ddc6177ab60e5ee2c.html監聽微信、支付寶等移動app及瀏覽器的返回、后退、上一頁按鈕的事件方法參考&#xff…

在gitlab 中使用webhook 實現php 自動部署git 代碼

在技術團隊討論中,我們決定從svn 遷移到 git ,于是使用了gitlab,代碼自動部署使用了webhook在服務器上 1.開啟PHP需要的環境支持 服務器環境必須先安裝git 環境,webhook 依賴php運行環境,同時需要使用shell_exec 和 exec 等函數。…

spi收發時的寄存器sr不變_「正點原子Linux連載」第二十七章SPI實驗(二)

1)實驗平臺:正點原子Linux開發板2)摘自《正點原子I.MX6U嵌入式Linux驅動開發指南》關注官方微信號公眾號,獲取更多資料:正點原子文件bsp_spi.c中有兩個函數:spi_init和spich0_readwrite_byte,函數spi_init是SPI初始化函…

vue腳手架vue數據交互_學習Vue:3分鐘的交互式Vue JS教程

vue腳手架vue數據交互Vue.js is a JavaScript library for building user interfaces. Last year, it started to become quite popular among web developers. It’s lightweight, relatively easy to learn, and powerful.Vue.js是用于構建用戶界面JavaScript庫。 去年&#…

[JSOI2018]潛入行動

題解 一道思路不難但是寫起來很麻煩的樹形背包 我們發現每個節點有很多信息需要保留 所以就暴力的設\(f[u][j][0/1][0/1]\)表示點u的子樹分配了j個監察器,點u有沒有被控制,點u放沒放監察器 然后就分四種情況暴力討論就好了 注意背包的時候要卡常數 代碼 #include<cstdio>…

css。元素樣式、邊框樣式

1.外邊距  margin 縮寫形式&#xff1a; margin&#xff1a;上邊距  右邊距  下邊距  左邊距 margin&#xff1a;上下邊距  左右邊距 margin&#xff1a;上邊距  左右邊距  下邊距 2.內邊距  padding 縮寫形式&#xff1a; padding&#xff1a;上邊距  右邊距…

html文本對齊6,HTML對齊文本

我要像以下列方式顯示頁面上的文本&#xff1a;HTML對齊文本My Text: Text HereMy Text: More Text Here.........................................................Text from line above continued here.我有以下的標記只是為了測試&#xff1a;body {font-family: arial;}fo…

vue底部跳轉_詳解Vue底部導航欄組件

不多說直接上代碼 BottomNav.vue&#xff1a;{{item.name}}export default{props:[idx],data(){return {items:[{cls:"home",name:"首頁",push:"/home",icon:"../static/home.png",iconSelect:"../static/home_select.png"}…

Android Studio環境搭建

Android Studio環境搭建 個人博客 歡迎大家多多關注該獨立博客。 ###[csdn博客]&#xff08;http://blog.csdn.net/peace1213&#xff09; 一直想把自己的經驗分享出來&#xff0c;記得上次寫博客還是ok6410的筆記。感覺時代久遠啊。記得那個時候我還一心想搞硬件了。如今又一次…

hacktoberfest_Hacktoberfest和其他有趣的事情將在本周末在freeCodeCamp

hacktoberfestby Quincy Larson昆西拉爾森(Quincy Larson) Hacktoberfest和其他有趣的事情將在本周末在freeCodeCamp (Hacktoberfest and other fun things going on this weekend at freeCodeCamp) Earlier this month, the freeCodeCamp community turned 3 years old. And …

C# 動態創建數據庫三(MySQL)

前面有說明使用EF動態新建數據庫與表&#xff0c;數據庫使用的是SQL SERVER2008的&#xff0c;在使用MYSQL的時候還是有所不同 一、添加 EntityFramework.dll &#xff0c;System.Data.Entity.dll &#xff0c;MySql.Data, MySql.Data.Entity.EF6 注意&#xff1a;Entity Frame…

iOS開發Swift篇—(七)函數(1)

一、函數的定義 &#xff08;1&#xff09;函數的定義格式 1 func 函數名(形參列表) -> 返回值類型 { 2 // 函數體... 3 4 } &#xff08;2&#xff09;形參列表的格式 形參名1: 形參類型1, 形參名2: 形參類型2, … &#xff08;3&#xff09;舉例&#xff1a;計算2個…

如何用計算機管理員權限,教你電腦使用代碼添加管理員權限的詳細教程

我們在使用電腦運行某些軟件的時候&#xff0c;可能需要用到管理員權限才能運行&#xff0c;通常來說直接點擊右鍵就會有管理員權限&#xff0c;但最近有用戶向小編反饋&#xff0c;在需要管理員權限的軟件上點擊右鍵沒有看到管理員取得所有權&#xff0c;那么究竟該如何才能獲…