久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

返回列表 發(fā)帖
查看: 2920|回復(fù): 2

java和Discuz論壇實(shí)現(xiàn)單點(diǎn)登錄,通過Ucenter(用戶管理中心)

8

主題

33

回帖

92

積分

漸入佳境

貢獻(xiàn)
0 點(diǎn)
金幣
48 個
樓主
發(fā)表于 2019-7-9 16:43:03 | 只看樓主 |倒序?yàn)g覽 |閱讀模式
一 Discuz論壇搭建步驟
  1:服務(wù)器環(huán)境配置
         服務(wù)器要支持php語言+支持mysql 5.0以上的數(shù)據(jù)庫 + Apache服務(wù)器(支持網(wǎng)站的一個服務(wù)器,通過域名的能訪問就可以了)

         Msql5.0以上的數(shù)據(jù)庫一個。

  2:安裝Discuz
         (1)下載Discuz源碼包http://www.discuz.net/thread-3570835-1-1.html

         (2)解壓源碼包Discuz_X3.2_SC_GBK.zip(這里以Discuz X3/2為例)有三個文件,把           其中的upload文件夾里面的內(nèi)容放在網(wǎng)站的根目錄下。

                   注意:

是upload文件夾下面的所有內(nèi)容放入網(wǎng)站根目錄下,如果把upload整個文件夾放在網(wǎng)站根目錄訪問的地址就是http://localhost/upload)

         (3)訪問域名地址就開始安裝如圖:參考地址:

http://jingyan.baidu.com/article/ac6a9a5ea76e022b653eacca.html

                  

                    

配置數(shù)據(jù)庫信息:

提前創(chuàng)建好mysql數(shù)據(jù)庫,用戶/密碼,這里進(jìn)行配置。同時給設(shè)置一個管理員賬號和密碼:點(diǎn)擊下一步

                   注意:一定是mysql 5.0以上的數(shù)據(jù)庫版本

                  

                   如果沒有問題的話就安裝成功了。它會自動創(chuàng)建對應(yīng)的數(shù)據(jù)庫表等相關(guān)信息。

                   然后訪問域名就直接可以訪問論壇了。

  3:Discuz的簡單配置介紹
       (1)前臺登錄及管理員功能
                  

                   如果是管理員的話會有一些管理信息



如果是管理員瀏覽帖子的話,會有“置頂”,“精華”,“明亮”等操作,如圖:



具體還有很多,這里不一一介紹。



       (2)后臺管理心中
管理中心,就是進(jìn)入后臺管理的入口。主要是網(wǎng)站的風(fēng)格,和布局

                   管理中心后臺有很多功能,首先需要設(shè)置的是論壇大致板塊,如下圖:

                  

                   對應(yīng)的前臺如下圖:



我理解的時間也有限,具體設(shè)置還需要多進(jìn)行操作,這里不進(jìn)行逐個說明。

二 Discuz論壇與java無縫對接(單點(diǎn)登錄)
  1: Discuz和java對接的原理
        Discuz和java對接需要一個中間件,它就是Ucenter。Comsenz(康盛)的UCenter當(dāng)前在國內(nèi)的單點(diǎn)登錄領(lǐng)域占據(jù)絕對份額,其完整的產(chǎn)品線令UCenter成為了賬號集成方面事實(shí)上的標(biāo)準(zhǔn)。基于UCenter,可以將Comsenz旗下的Discuz!(社區(qū)論壇系統(tǒng))、SupeSite(門戶CMS系統(tǒng))、X-Space(博客系統(tǒng))從用戶資源層面進(jìn)行無縫整合,使得賬號實(shí)現(xiàn)統(tǒng)一管理,在任何一個系統(tǒng)中進(jìn)行注冊、登錄、注銷等操作時,該賬號在其他系統(tǒng)中的會話狀態(tài)也將同步更新,最終實(shí)現(xiàn)一號通的單點(diǎn)登錄模式。



使用ucenter進(jìn)行同步操作,主要依托于ucenter  server 和ucenter client之間的api接口進(jìn)行通訊。要使得通訊成為可能,首先要通過ucenter管理所用應(yīng)用(通過配置使得當(dāng)前應(yīng)用和ucenter產(chǎn)生聯(lián)系,也就是通訊成功)。其他應(yīng)用通過掛接到ucenter的接口上,從而使得某些數(shù)據(jù)可以進(jìn)行同步操作。

                  

  2 : Discuz和Ucenter通道的配置
(1)Ucenter用戶管理中心的簡單介紹

         Discuz和Ucenter都屬于Comsenz(康盛)公司的產(chǎn)品,所以Discuz和Ucenter之間的通信通道非常容易建立。

    Discuz中附帶的有Ucenter應(yīng)用程序例如:

    之前Discuz論壇安裝之后訪問地址是http://localhost/ upload,那么Ucenter的訪問地址是http://localhost/ upload/uc_server,登錄界面如下:



輸入之前的管理員密碼即可登錄成功!

后臺管理頁面如下



(2)Ucenter于Discuz通道建立。

         我們?nèi)绻玫氖荄iscuz自帶的Ucenter,他與Discuz就已經(jīng)默認(rèn)是互通的,我可以直接來用也可以重新配置。建立成功如下:



         注釋:這里有系統(tǒng)默認(rèn)的我們就直接用,下面Ucenter于java建立通道的時候會詳細(xì)說明怎么建立通道,建立通信通道的方式都是一樣的。

3 : Java和Ucenter通道的配置
(1)Ucenter端添java web網(wǎng)站通道
登錄成功之后

應(yīng)用管理》添加應(yīng)用

        

         標(biāo)紅的為主要填寫的。其他的可以不填寫。



安裝方式:自定義

應(yīng)用類型:其他

應(yīng)用名稱:JAVA項(xiàng)目名稱,可隨意

應(yīng)用主URL:JAVA項(xiàng)目的訪問地址,例如:http://localhost:8080/javaTest

通信密鑰:任意字符,例如:123456

應(yīng)用接口文件名稱:uc.php,這個不要改,前面也不要加/api/,UCenter在與其通信時會自動轉(zhuǎn)換為:http://localhost:8080/javaTest/api/uc.php

是否開啟同步登錄:是

是否接受通知:是

以上的配置項(xiàng)必填,其他保持為空即可。

點(diǎn)擊“提交”,保存成功后,記下該JAVA應(yīng)用的APPID,下面的配置中會需要。

此時返回應(yīng)用列表,UCenter會自動進(jìn)行通信驗(yàn)證,不出意外肯定會出現(xiàn)“通信失敗”的字樣,先不必管它

因?yàn)閖ava端也需要一些配置

(2)java web網(wǎng)站端的配置
1、從“discuz-ucenter-api-for-java”的開源項(xiàng)目網(wǎng)站中下載相關(guān)的API文件,也可以從這里下載:JAVA_UCenter.zip

這里給一個比較好的下載地址,包括源碼,及jar包文件:

http://code.google.com/p/discuz-ucenter-api-for-java

2、將JAVA_UCenter.zip解壓、覆蓋到你的JAVA項(xiàng)目中,其中的新文件有:

src/config.properties:本地的JAVA項(xiàng)目與UCenter的接口配置文件(需要根據(jù)實(shí)際環(huán)境進(jìn)行配置)

src/api/ucenter/Base64.java

src/api/ucenter/Client.java:將常用的UCenter操作封裝成的客戶端對象,我們在項(xiàng)目中主要用它來與UCenter打交道

src/api/ucenter/PHPFunctions.java

src/api/ucenter/UC.java:本地的JAVA項(xiàng)目用來接收UCenter同步命令的Servlet接口,其訪問地址必須為:/api/uc.php

src/api/ucenter/XMLHelper.java

WebRoot/WEB-INF/web.xml:主要就是將src/api/ucenter/UC.java定義為Servlet



注意:

(1) src/config.properties中的代碼如下:

# ================================================
# Ucenter API for JAVA
# ================================================
UC_API = http://localhost:9201
UC_IP =
UC_KEY = 123456
UC_APPID = 2
UC_CONNECT =

其中,UC_API表示UCenter的訪問地址,UC_KEY就是在UCenter中添加新應(yīng)用時定義的通信密鑰,UC_APPID表示新應(yīng)用的APPID,就是剛才記下的那個。

除這三項(xiàng)外,其他的配置保持為空即可。

(2) WebRoot/WEB-INF/web.xml中的代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   
  <servlet>
    <display-name>同步UC Server發(fā)出的操作指令</display-name>
    <servlet-name>UC</servlet-name>
    <servlet-class>api.ucenter.UC</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>UC</servlet-name>
    <url-pattern>/api/uc.php</url-pattern>
  </servlet-mapping>
  
</web-app>

別的無所謂,只需注意這一行:<url-pattern>/api/uc.php</url-pattern>

3、JAVA端配置完成,在eclipse中啟動調(diào)試模式

4、再次返回到UCenter的控制臺,點(diǎn)擊應(yīng)用管理,此時應(yīng)該會看到綠色的“通信成功”字樣





         到這里Discuz和Ucenter之間的通信通道與java和Ucenter之間的通信通道都已經(jīng)建立成功,下面就可以在2.3.4看具體如何開發(fā)



2.3.4  Java端具體代碼實(shí)現(xiàn)
(1)java網(wǎng)站web 網(wǎng)站注冊同步Discuz論壇注冊
1> 步驟說明:

注冊java網(wǎng)站web網(wǎng)站 > 調(diào)用Client里面的UC注冊Discuz論壇的接口(uc_user_register) > 判斷注冊結(jié)果

         2>具體代碼實(shí)現(xiàn)(僅供參考)

         //java網(wǎng)站網(wǎng)站的注冊

      boolean falg = tempUserService.insert(tempUserVO);

      //同步論壇的注冊

      if(falg){

         Client uc = new Client();

         String $returns = uc.uc_user_register(tempUserVO.getUsername(), tempUserVO.getPass(), tempUserVO.getEamil());

         int $uid = Integer.parseInt($returns);

           if ($uid <= 0) {

               if ($uid == -1) {

                   System.out.print("用戶名不合法");

               } else if ($uid == -2) {

                   System.out.print("包含要允許注冊的詞語");

               } else if ($uid == -3) {

                   System.out.print("用戶名已經(jīng)存在");

               } else if ($uid == -4) {

                   System.out.print("Email 格式有誤");

               } else if ($uid == -5) {

                   System.out.print("Email 不允許注冊");

               } else if ($uid == -6) {

                   System.out.print("該 Email 已經(jīng)被注冊");

               } else {

                   System.out.print("未定義");

               }

           }

           System.out.println("id:"+$uid);

         System.out.println("添加成功!");

        

      }else{

         System.out.println("添加失敗!");

      }

(2)java網(wǎng)站web 網(wǎng)站登錄,同步Discuz論壇登錄
1> 步驟說明:

登錄民信web網(wǎng)站 > 調(diào)用Client里面的UC登錄接口獲取用戶信息 > 接受返回的用戶XML信息并解析 > 調(diào)用Client登錄DIscuz論壇的登錄接口 > 接受返回過來的js代碼 > 輸出到j(luò)ava網(wǎng)站web網(wǎng)站 > 跳轉(zhuǎn)到論壇地址(此時已經(jīng)你會發(fā)現(xiàn)用戶已經(jīng)登錄)

         2>具體代碼實(shí)現(xiàn)(僅供參考)

//網(wǎng)站的登錄

      TempUser tempUser =  tempUserService.queryByName(tempUserVO.getUsername());

      System.out.println("結(jié)果:"+tempUser.getAddress()+"  =="+tempUser.getEamil());

      request.getSession().setAttribute("tempUser", tempUser);

     

      //Discuz論壇的登錄

      Client uc = new Client();

      String $result = uc.uc_user_login(tempUser.getUsername(), tempUser.getPass());

      String $ucsynlogin = "";

       LinkedList<String> rs = XMLHelper.uc_unserialize($result);

          if(rs.size()>0){

               int $uid = Integer.parseInt(rs.get(0));

               String $username = rs.get(1);

               String $password = rs.get(2);

               String $email = rs.get(3);

               if($uid > 0) {

                   $ucsynlogin = uc.uc_user_synlogin($uid);

               } else if($uid == -1) {

                   System.out.println("用戶不存在,或者被刪除");

               } else if($uid == -2) {

                   System.out.println("密碼錯");

               } else {

                   System.out.println("未定義");

               }

               //設(shè)置本地Discuz登錄的cookie信息,cookie存活時間

               //直接訪問論壇就有用戶信息了

               try {

                  response.setCharacterEncoding("UTF-8");

                  //同步Cookie信息

//                response.addHeader("P3P"," CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");

//              Cookie auth = new Cookie("auth", uc.uc_authcode($password+"\t"+$uid, "ENCODE"));

//              auth.setMaxAge(31536000);

//              //auth.setDomain("localhost");//設(shè)置本地cookie

//              response.addCookie(auth);

//              Cookie user = new Cookie("Discuz_loginuser", $username);

//              response.addCookie(user);

                 

                  //把返回過來的js文件直接輸出在頁面上,然后跳轉(zhuǎn)到論壇網(wǎng)站首頁就已經(jīng)是登錄之后的

                  PrintWriter out = response.getWriter();

                out.write($ucsynlogin);

                out.flush();           } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

             }

           }else{

               System.out.println("Login failed");

           }

//    System.out.println("登錄的結(jié)果:"+$result);

(3)java網(wǎng)站退出,論壇同步退出
1> 步驟說明:

java網(wǎng)站網(wǎng)站注銷 > 調(diào)用Client里面的uc_user_synlogout同時注銷論壇用戶

         2>具體代碼實(shí)現(xiàn)(僅供參考)

          Client uc = new Client();

      String $ucsynlogout = uc.uc_user_synlogout();

      System.out.println("退出成功"+$ucsynlogout);

      return $ucsynlogout;

(4)java網(wǎng)站修改用戶信息同步論壇資料信息
1> 步驟說明:

修改用戶保存 > 獲取之前論壇用戶信息 > 調(diào)用接口進(jìn)行修改uc_user_edit

         2>具體代碼實(shí)現(xiàn)(僅供參考)

                   Client uc = new Client();

      uc.uc_user_edit($username, $oldpw, $newpw, $email, $ignoreoldpw, $questionid, $answer)



主要代碼片段

   

(5)論壇登錄同步登錄java網(wǎng)站web
    我們來看看discuz那邊登錄了,java這邊怎么實(shí)現(xiàn)同步登錄。在uc.java里有一個doanswer的方法。所有同步操作都在這個方法里完成。其邏輯是這樣的,uc這個類繼承了HttpServlet。當(dāng)ucenter發(fā)出通知時,會訪問這個servlet.并執(zhí)行他的doGet()方法。doGet()調(diào)用doAnswer().

  String $code = request.getParameter("code");會傳一個code進(jìn)來(加密了的)。然后調(diào)用$code = new Client().uc_authcode($code, "DECODE");進(jìn)行解密操作。新建一個Map,Map<String,String> $get = new HashMap<String, String>();然后根據(jù)解密出來的code的內(nèi)容封裝這個Map.調(diào)用這個方法,parse_str($code, $get); 經(jīng)過以上操作后,所有同步操作需要的信息都在map里,如action。action代表的是什么操作,如同步登錄,同步退出,修改密碼等。還有其他信息,如username.登錄的用戶名。改密碼時還會傳新密碼過來。所有的這些都包含在這個叫$get的Map里。然后我們就可以進(jìn)行我們自己的邏輯操作了。(以上邏輯不想理解沒關(guān)系,你只要知道當(dāng)你在discuz登錄之后,uc.java的doAnswer()方法就會被調(diào)用,你所需要的一切信息都包含在$get這個Map里)

   操作到這里,你一定想吐槽筆者!不行啊,discuz那邊登錄了,java這邊完全沒反應(yīng)啊!!doAnswer方法沒有被調(diào)用啊!是的,你還需要到discuz后臺做一些設(shè)置。管理中心->站長->ucenter設(shè)置。把ucenter連接方式改為接口方式。然后,你登錄discuz時,doAnswer()方法就會被調(diào)用了。(其他操作如退出也一樣)



注意亂碼問題:   

Discuz登錄同步j(luò)ava網(wǎng)站web網(wǎng)站登錄,中文亂碼問題

     到這里,我們又遇到了中文的問題了,discuz用中文登錄的時候不行啊!是的,這確實(shí)是個比較麻煩的問題。筆者也弄了好久。原因是這樣的,上面提到過,傳進(jìn)來的$code是需要uc_authcode()方法進(jìn)行解密的,當(dāng)中文的時候解密出來的$code是"".解決方法如下:在Client.java的uc_authcode()方法里找到這句String $result = $result1.substring(0, $result1.length());并把它改成:        

?

1

2

3

4

5

6

7

String $result= $result1.toString();

   try{

      $result=new String($result.getBytes("iso-8859-1"),"GBK");

    }catch (Exception e) {

       $result = $result1.substring(0, $result1.length());

       // TODO: handle exception

    }

這樣還不行,解密出來的code中文部分仍是亂碼。所以在uc.java的$code = new Client().uc_authcode($code, "DECODE");這句下面還要加上$code = new String($code.getBytes("GBK"),"UTF-8");可能有人會說直接轉(zhuǎn)成utf-8不行嗎?為什么要先轉(zhuǎn)成gbk呢?如果直接轉(zhuǎn)成utf-8的話,解密出來的$code是""。到此中文的問題就得到解決了。筆者下載的是GBK版本的discuz,其他情況自己改一下編碼應(yīng)該沒問題。
回復(fù)

使用道具 舉報

8

主題

33

回帖

92

積分

漸入佳境

貢獻(xiàn)
0 點(diǎn)
金幣
48 個
沙發(fā)
 樓主| 發(fā)表于 2019-7-9 16:43:22 | 只看Ta
以上內(nèi)容轉(zhuǎn)載https://www.cnblogs.com/puqiuxiaomao/p/4037092.html
回復(fù)

使用道具 舉報

0

主題

1

回帖

2

積分

初學(xué)乍練

貢獻(xiàn)
0 點(diǎn)
金幣
1 個
板凳
發(fā)表于 2019-9-1 13:06:33 | 只看Ta
為什么我返回的那個script的鏈接執(zhí)行一直返回-1
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

  • 關(guān)注公眾號
  • 有償服務(wù)微信
  • 有償服務(wù)QQ

手機(jī)版|小黑屋|Discuz! 官方交流社區(qū) ( 皖I(lǐng)CP備16010102號 |皖公網(wǎng)安備34010302002376號 )|網(wǎng)站地圖|star

GMT+8, 2025-9-18 21:08 , Processed in 0.072061 second(s), 33 queries .

Powered by Discuz! W1.0 Licensed

Copyright © 2001-2025 Discuz! Team.

關(guān)燈 在本版發(fā)帖
有償服務(wù)QQ
有償服務(wù)微信
返回頂部
快速回復(fù) 返回頂部 返回列表