一、需求分析
有個JAVA項目與一個Discuz論壇需要整合,使得它們之間能實現單點登錄功能。可是Discuz是PHP寫的,兩者語言不通該如何整合呢?查閱官方資料發現,Discuz並未開放說有什麼用戶接口之類的。但卻發現了這貨UCenter,顯然這貨與Discuze是一家人。so,接下來的整合我們即將用到UCenter作爲中間件來實現不通語言項目之間用戶的共享。
二、關於UCenter
介紹方法之前,我覺得還是有必要先說說UCenter,理解了它的工作原理是很有必要的。
UCenter 的中文意思就是“用戶中心”,其中的 U 代表 User,也代表 You,取其中的含義就是“用戶中心”,或者說“你(最終用戶)的中心”。UCenter 是今後 Comsenz 旗下各個產品之間信息直接傳遞的一個橋樑。通過 UCenter,站長可以無縫整合 Comsenz 系列產品,甚至更多的第三方應用,實現用戶的一站式登錄和個人信息、積分等資料的統一管理。
以上是官方介紹,說白了,它就是座橋樑。例如A應用中用戶登錄了,通知UCenter,然後UCenter再把這消息通知給B啊C啊等等其它的應用,從而實現了單點登錄。說的太累,那就請看下方這幅圖(轉至網絡):
恩,大概流程是這樣子的。用戶登錄了,發送通知給UCenter Service。然後UCenter再推送消息給別的應用,應用接受消息設置cookie等,實現了同步登錄、登出。
三、方法步驟
1、設置UCenter:
在裝完Discuz時,我們一般都會勾選同步安裝UCenter,那麼你就可以從Discuz後臺,登錄到UCenter後臺去進行設置,如圖:
或者你輸入http://localhost(或ip)/uc_server 也可以跳轉到登錄頁面。選擇管理員身份登錄,賬戶密碼就是Discuz管理後臺的管理員賬戶密碼。
但是,這兒會出現個小BUG。Discuz升級到3.x版本後,這兒登錄卻毫無反應。官方社區已經提供瞭解決的辦法,其實很簡單,只要修改admin.php文件就可以了。而文件則在你項目的uc_server/model/admin.php 如圖:
打開文件後如下圖紅色框內的信息:
恩,修改好後,保存退出重新登錄就OK了。
2、UCenter後臺應用設置
在應用管理中可以看到ID爲1的Discuz應用,此時你該做的就是添加你想要在這平臺上整合的其它應用。
如圖填寫咯,都有些註釋,如果你還是不清楚的話,請戳這兒:http://faq.comsenz.com/library/UCenteruse/useuse/useuse_addapp.htm 官方教程。
添加好後,你會看到應用管理中如下圖:
多了個應用,請牢牢記住這個新應用的ID和之前添加時填寫的通信祕鑰,到時候會用的上的。而在右方顯示通信失敗時正常的,莫慌,因爲你的另一個應用還沒啓動,還沒配置好啊!
3、新應用中的文件配置
這個新應用呢,就是要整合的JAVA項目咯。首先,請看這兒:http://faq.comsenz.com/library/UCenter/introduction/introduction_interface.htm 這是Discuz社區開放的UCenter開發接口,遺憾的是它的例子同樣也是php寫的。但早已經有人根據接口寫了個java版的接口了,叫做:discuz-ucenter_api_for_java 。本文的例子也是通過它實現的,Demo結構圖如下。
好的,我們先來修改下最爲重要的配置文件:config.properties(Demo項目中是這個配置文件,具體要依據你如何整合到自己項目中做修改變更,例如我整合到我自己的項目中後就是application.properties文件)
UC_API是你discuz項目中UCenter的接受信息地址(不一定要ip地址,可以使你的域名地址),這個地址下會有個uc.php文件接收處理信息。
UC_IP是爲了防止你項目域名解析不正確,而寫實際的IP地址。
UC_KEY是添加在UCenter後臺管理中添加新應用時該應用的通信密鑰。
UC_APPID是應用的ID哦~之前有提醒過哦。
當然,還有個配置得做,那就是你得web.xml文件:
都配置好後,我們就開始測試咯。等等,還得說下,UC.java這個其實是處理UCenter發送來的信息。而PHPFuctions.java則是應用發送請求給UCenter的處理類。Demo裏大家可以去分析看看。
4、測試結果
運行Jsp_demo.jsp文件哦,記得你的先註冊個號通知UCenter,這兒有個疑惑:當你註冊完後,UCenter數據庫裏是有新用戶,然而它並未通知給discuz,discuz中卻無新用戶數據,所以第一次註冊並未能同步到用戶,得需要新用戶到discuz登錄過一次後,才能把用戶數據相互同步。
沒錯,這段js代碼則是再一次發送請求給UCenter跟他說,哥們,我已經正確登錄了,修改了cookie那些,麻煩你跟其它傢伙說下,讓它們也跟我同步唄。所以說這段JS代碼很重要。如果它返回錯誤或請求通信失敗等,也就都無法實現應用同步了。
5、本文的Demo已經把原接口做了些轉碼修改,完美的解決了中文註冊、登錄等問題。
三、結語
馬上就過年了,這是今年的最後一篇博文,寫的略顯倉促。提前祝福大家,新年快樂!在新的一年,朝着大牛路一步一個腳印。還是當初那句話:分享是種快樂,堅持是種精神。
由於文章附件只能上傳2M以內,我吧demo傳到了百度網盤:http://pan.baidu.com/s/1CUfhk