JAVA項目單點登錄Discuz

一、需求分析

    有個JAVA項目與一個Discuz論壇需要整合,使得它們之間能實現單點登錄功能。可是Discuz是PHP寫的,兩者語言不通該如何整合呢?查閱官方資料發現,Discuz並未開放說有什麼用戶接口之類的。但卻發現了這貨UCenter,顯然這貨與Discuze是一家人。so,接下來的整合我們即將用到UCenter作爲中間件來實現不通語言項目之間用戶的共享。


二、關於UCenter

    介紹方法之前,我覺得還是有必要先說說UCenter,理解了它的工作原理是很有必要的。

    UCenter 的中文意思就是“用戶中心”,其中的 U 代表 User,也代表 You,取其中的含義就是“用戶中心”,或者說“你(最終用戶)的中心”。UCenter 是今後 Comsenz 旗下各個產品之間信息直接傳遞的一個橋樑。通過 UCenter,站長可以無縫整合 Comsenz 系列產品,甚至更多的第三方應用,實現用戶的一站式登錄和個人信息、積分等資料的統一管理。

    以上是官方介紹,說白了,它就是座橋樑。例如A應用中用戶登錄了,通知UCenter,然後UCenter再把這消息通知給B啊C啊等等其它的應用,從而實現了單點登錄。說的太累,那就請看下方這幅圖(轉至網絡):

wKiom1ThRLaj6N6aAAC75IFJVWk495.jpg

恩,大概流程是這樣子的。用戶登錄了,發送通知給UCenter Service。然後UCenter再推送消息給別的應用,應用接受消息設置cookie等,實現了同步登錄、登出。


三、方法步驟

    1、設置UCenter:

    在裝完Discuz時,我們一般都會勾選同步安裝UCenter,那麼你就可以從Discuz後臺,登錄到UCenter後臺去進行設置,如圖:

wKiom1ThRnfQD6XMAAE58r3YW5A079.jpg

    或者你輸入http://localhost(或ip)/uc_server 也可以跳轉到登錄頁面。選擇管理員身份登錄,賬戶密碼就是Discuz管理後臺的管理員賬戶密碼。

    但是,這兒會出現個小BUG。Discuz升級到3.x版本後,這兒登錄卻毫無反應。官方社區已經提供瞭解決的辦法,其實很簡單,只要修改admin.php文件就可以了。而文件則在你項目的uc_server/model/admin.php 如圖:

wKiom1ThR-mQeoLpAAV_1IpWo0U087.jpg

打開文件後如下圖紅色框內的信息:

wKioL1ThSUvhQH9VAAIDuH_c30Y675.jpg

恩,修改好後,保存退出重新登錄就OK了。

    2、UCenter後臺應用設置

wKiom1ThSSeDzwIbAAGIMVtU_ck789.jpg

    在應用管理中可以看到ID爲1的Discuz應用,此時你該做的就是添加你想要在這平臺上整合的其它應用。

wKioL1ThSoCR4BBEAAMltGWTlaY130.jpg

如圖填寫咯,都有些註釋,如果你還是不清楚的話,請戳這兒:http://faq.comsenz.com/library/UCenteruse/useuse/useuse_addapp.htm 官方教程。

    添加好後,你會看到應用管理中如下圖:

wKiom1ThSi-hKetwAAKERXeURpU547.jpg

多了個應用,請牢牢記住這個新應用的ID和之前添加時填寫的通信祕鑰,到時候會用的上的。而在右方顯示通信失敗時正常的,莫慌,因爲你的另一個應用還沒啓動,還沒配置好啊!

    3、新應用中的文件配置

    這個新應用呢,就是要整合的JAVA項目咯。首先,請看這兒:http://faq.comsenz.com/library/UCenter/introduction/introduction_interface.htm 這是Discuz社區開放的UCenter開發接口,遺憾的是它的例子同樣也是php寫的。但早已經有人根據接口寫了個java版的接口了,叫做:discuz-ucenter_api_for_java 。本文的例子也是通過它實現的,Demo結構圖如下。

wKiom1ThTRLQBYzpAAGVjVOw9jQ856.jpg

    好的,我們先來修改下最爲重要的配置文件:config.properties(Demo項目中是這個配置文件,具體要依據你如何整合到自己項目中做修改變更,例如我整合到我自己的項目中後就是application.properties文件)

wKioL1ThTo3yuh9AAAPyA4Om6u8603.jpg

UC_API是你discuz項目中UCenter的接受信息地址(不一定要ip地址,可以使你的域名地址),這個地址下會有個uc.php文件接收處理信息。

UC_IP是爲了防止你項目域名解析不正確,而寫實際的IP地址。

UC_KEY是添加在UCenter後臺管理中添加新應用時該應用的通信密鑰。

UC_APPID是應用的ID哦~之前有提醒過哦。

    當然,還有個配置得做,那就是你得web.xml文件:

wKioL1ThUC7ifu-1AAQLBqGzB6U818.jpg

    都配置好後,我們就開始測試咯。等等,還得說下,UC.java這個其實是處理UCenter發送來的信息。而PHPFuctions.java則是應用發送請求給UCenter的處理類。Demo裏大家可以去分析看看。

    4、測試結果

wKioL1ThU6zwU8gbAAD5--FZOa0945.jpg

    運行Jsp_demo.jsp文件哦,記得你的先註冊個號通知UCenter,這兒有個疑惑:當你註冊完後,UCenter數據庫裏是有新用戶,然而它並未通知給discuz,discuz中卻無新用戶數據,所以第一次註冊並未能同步到用戶,得需要新用戶到discuz登錄過一次後,才能把用戶數據相互同步。

    當你登錄成功,會發現收到段返回的JS代碼:wKioL1ThVK2ynT7HAAFXhk2UYcU102.jpg

    沒錯,這段js代碼則是再一次發送請求給UCenter跟他說,哥們,我已經正確登錄了,修改了cookie那些,麻煩你跟其它傢伙說下,讓它們也跟我同步唄。所以說這段JS代碼很重要。如果它返回錯誤或請求通信失敗等,也就都無法實現應用同步了。

    5、本文的Demo已經把原接口做了些轉碼修改,完美的解決了中文註冊、登錄等問題。


三、結語

    馬上就過年了,這是今年的最後一篇博文,寫的略顯倉促。提前祝福大家,新年快樂!在新的一年,朝着大牛路一步一個腳印。還是當初那句話:分享是種快樂,堅持是種精神。


由於文章附件只能上傳2M以內,我吧demo傳到了百度網盤:http://pan.baidu.com/s/1CUfhk


  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章