java jespa_Jespa实际运用的一点心得
最近在項目中遇到一個需求,此需求場景就是:當用戶登錄了windows,若用戶用的AD域賬號登錄,則用IE瀏覽器打開應用系統時,則不必再輸入賬號和密碼,自動登錄到系統。簡單滴說,就是應用系統與AD域進行單點。
經過搜索得知,可以知道,HTTP協議中有個401狀態表示當前用戶未授權(401 Unauthorized),當要求用NTML方式提供用戶信息時,IE瀏覽器會自動獲取當前windows賬戶(前提是要瀏覽器勾選了“自動使用當前用戶名和密碼登陸”),服務器獲取后將此信息向域服務器進行驗證并返回登陸狀態信息。
以上就是要實現的單點的原理。
那我們現在來看看,如果要實現這個需求,都有哪些方案。
1.人工獲取到當前windows賬戶信息,然后應用服務器向域服務器進行驗證;
此方案比較棘手的是要怎么獲取到windows賬戶信息呢?可能賬戶名還比較容易獲取,但是密碼就別想微軟會明文提供給你了。
2.利用現成的IIS服務器做中介,在用戶登錄應用服務器的時候,通過IIS服務器進行登錄驗證,然后根據其返回的信息進行登錄處理;
此方案是行得通的,比較婉轉,不那么雅觀,這里就不多說了。
3.利用第三方的開源項目jcifs。
jcifs是運用的最多的。但是它有個缺點就是:不支持NTLM2協議。而windows vista或7以上的系統都是默認采用NTLM2協議的,而目前用戶也都是windows7以上的操作系統,因此這個方案也比較糾結。最終,有了下面的方案。
4.利用有限制的Jespa。
這個是可以免費使用的,支持NTLM2協議,但是呢不開源也有license限制。
在這里Jespa我們只做研究,不做其它目的,方便大家學習交流。因為這個在網絡上介紹的太少了。
那么從官網下載Jespa包后,里面會包含技術文檔和一些使用例子。根據技術文檔的介紹,我們可以一步一步進行操作,體驗下它的提供的功能。
一、環境的搭建。
首先是要搭建AD域的環境,這個請谷歌。比較簡單,但是要注意的是同時也要安裝DNS服務,不然后面利用jespa提供的腳本進行創建的計算機賬戶會不成功。搭建好后,就可以找一臺機器來加入這個AD域,如能成功加入這個域,則搭建成功。
二、利用jespa提供的腳步創建計算機賬戶。
目的原話是這樣說的:
“to authenticate clients using NTLM such as with the HttpSecurityService (or HttpSecurityFilter),
SaslServer, or JAAS LoginModule, a Computer account must be created in Active Directory with a known
password as described in this section”
不過我們也可以不需要利用它提供的腳步進行創建,我們也可以手工創建一個出來,但是呢,手工創建的是不會有密碼的,因此,手工創建完后還是需要利用它提供的腳步來創建密碼。利用它腳本來進行創建有個好處就是:按照它的提示一步一步進行,最后它會自動生成一份配置文檔給你。這份配置是后面項目的運行需要用到的。
三、配置如下所示:
#此處可采用的Provider包括(默認為NtlmSecurityProvider):NtlmSecurityProvider,LdapSecurityProvider,ChainSecurityProvider,WordPressSecurityProvider
provider.classname=jespa.ntlm.NtlmSecurityProvider
#以下user和pwd,當登陸采用Form Login時,才需要配置。如SSO采用IE內置彈出窗口,可不配置。
http.parameter.username.name=username
http.parameter.password.name=password
#當URL請求中,包含參數logout=1時,將刪除會話,退出系統。
#例如:https://as1.busicorp.local/account/login?logout=1
http.parameter.logout.name =logout
#http.parameter.anonymous.name=anon
#當登陸驗證失敗或異常時,將轉向該頁面。該路徑需包含工程名。
fallback.location= /login.jsp
#哪些頁面不進入jespa filter/login.jsp,
excludes= /logout.jsp,/logoutConfirm.jsp,/resource/*#groups.allowed = BUSICORP\\Domain Admins
#
# NtlmSecurityProvider properties
#
#jespa.log.path 該路徑經測試,必須為絕對路徑。與工程路徑無關
jespa.log.path = c://jespa.log
#jespa.log.level 3以上信息為Debug狀態,如發布后需修改為1
jespa.log.level = 4
jespa.account.canonicalForm = 3
# Replace the following with properties determined in Step 1 of Installation
##域名
jespa.bindstr = test.com
jespa.domain.netbios.name = test
#可執行DNS解析Server IP
#jespa.dns.servers = 192.168.15.110,192.168.15.115
#jespa.dns.site = Paris
##以下帳號必須為Computer Account,而非普通User。可在AD Server,用jespa中的SetupWizard.vbs創建。由于AD不熟悉,其他方式不知如何創建
##注意創建Account時,無$ 此處配置必須有$
# Generated by the Jespa Setup Wizard from IOPLEX Software on 2014-10-28
#jespa.bindstr = testoa.com
jespa.dns.servers = 192.168.92.135
jespa.dns.site = Default-First-Site-Name
jespa.service.acctname = jespa1$@test.com
jespa.service.password = pej~43juz-83
四、利用它提供的web應用,進行測試
只要配置及Filter正確,運行后即可自動登錄到域驗證,并返回你的賬戶信息,根據它提供的賬戶名,就可以利用這個賬戶名來在自己的應用系統里面單點,很簡單的。
五、一些需求定制
當然了,能自動登錄是基本功能。但是如果有些用戶不是域用戶怎么辦?這時候如果你不是域用戶,則會彈出微軟的驗證框來進行賬戶信息填寫。但是問題還是會存在的,因為你可能根本不是域用戶,是應用系統里面的一個特殊用戶,那么,這個就得利用應用系統本身提供的驗證框架了。一直不消失的驗證框很是讓人蛋疼。因此,可以在其代碼做一點定制讓其若果不是域用戶則跳轉回應用系統本身的驗證頁面(不需要那么復雜,具體看配置文件的fallback.location注釋)。
特別注意的是,配置參數需要特別嚴謹,小心別讓Filter死循環了。感覺還有很多東西要說,但是有些東西只能意會不能言傳,自己動手做了才會有了感覺。就這樣吧,心情不太好,唉。
總結
以上是生活随笔為你收集整理的java jespa_Jespa实际运用的一点心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高性能网站建设的最佳实践(二)
- 下一篇: python笔记:python中 | ^