有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。

本文主要是介绍有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

discuz-ucenter_api_for_java

有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。

所有的代码

1.UC.java


package com.fivestars.interfaces.bbs.api;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.fivestars.interfaces.bbs.client.Client;/**
* ================================================
* Discuz! Ucenter API for JAVA
* ================================================
* 此类用来同步UC Server发出的操作指令
* 可以根据业务需要添加相应的执行代码
*
* 作者:梁平
* 创建时间:2009-2-20
*/
public class UC extends HttpServlet{private static final long serialVersionUID = -7377364931916922413L;public static boolean IN_DISCUZ= true;public static String UC_CLIENT_VERSION="1.5.0";        //note UCenter 版本标识public static String UC_CLIENT_RELEASE="20081031";public static boolean API_DELETEUSER=true;                //note 用户删除 API 接口开关public static boolean API_RENAMEUSER=true;                //note 用户改名 API 接口开关public static boolean API_GETTAG=true;                //note 获取标签 API 接口开关public static boolean API_SYNLOGIN=true;                //note 同步登录 API 接口开关public static boolean API_SYNLOGOUT=true;                //note 同步登出 API 接口开关public static boolean API_UPDATEPW=true;                //note 更改用户密码 开关public static boolean API_UPDATEBADWORDS=true;        //note 更新关键字列表 开关public static boolean API_UPDATEHOSTS=true;                //note 更新域名解析缓存 开关public static boolean API_UPDATEAPPS=true;                //note 更新应用列表 开关public static boolean API_UPDATECLIENT=true;                //note 更新客户端缓存 开关public static boolean API_UPDATECREDIT=true;                //note 更新用户积分 开关public static boolean API_GETCREDITSETTINGS=true;        //note 向 UCenter 提供积分设置 开关public static boolean API_GETCREDIT=true;                //note 获取用户的某项积分 开关public static boolean API_UPDATECREDITSETTINGS=true;        //note 更新应用积分设置 开关public static String API_RETURN_SUCCEED   =    "1";public static String API_RETURN_FAILED    =   "-1";public static String API_RETURN_FORBIDDEN =   "-2";@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String result = doAnswer(request, response);response.getWriter().print(result);}/*** 执行具体的Action* 所有服务器发出的参数均可通过$get来获得。* 注意: request本身是不能得到参数值的。** @param request* @param response* @return 操作状态或操作结果*/private String doAnswer(HttpServletRequest request, HttpServletResponse response){//处理String $code = request.getParameter("code");if($code==null) return API_RETURN_FAILED;Map<String,String> $get = new HashMap<String, String>();$code = new Client().uc_authcode($code, "DECODE");parse_str($code, $get);if($get.isEmpty()) {return "Invalid Request";}if(time() - tolong($get.get("time")) > 3600) {return "Authracation has expiried";}String $action = $get.get("action");if($action==null) return API_RETURN_FAILED;if($action.equals("test")) {return API_RETURN_SUCCEED;} else if($action.equals("deleteuser")) {return API_RETURN_SUCCEED;} else if($action.equals("renameuser")) {return API_RETURN_SUCCEED;} else if($action.equals("gettag")) {if(!API_GETTAG ) return API_RETURN_FORBIDDEN;//同步代码return API_RETURN_SUCCEED;} else if($action.equals("synlogin")) {if(!API_SYNLOGIN ) return (API_RETURN_FORBIDDEN);//note 同步登录 API 接口//obclean();response.addHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");int $cookietime = 31536000;Cookie user = new Cookie("loginuser",$get.get("username"));user.setMaxAge($cookietime);response.addCookie(user);} else if($action.equals("synlogout")) {if(!API_SYNLOGOUT ) return (API_RETURN_FORBIDDEN);//note 同步登出 API 接口//obclean();response.addHeader("P3P"," CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");//clearcookie();Cookie user = new Cookie("loginuser","");user.setMaxAge(0);response.addCookie(user);} else if($action.equals("updateclient")) {if(!API_UPDATECLIENT ) return API_RETURN_FORBIDDEN;//同步代码return API_RETURN_SUCCEED;} else if($action.equals("updatepw")) {if(!API_UPDATEPW) return API_RETURN_FORBIDDEN;//同步代码return API_RETURN_SUCCEED;} else if($action.equals("updatebadwords")) {if(!API_UPDATEBADWORDS) return API_RETURN_FORBIDDEN;//同步代码return API_RETURN_SUCCEED;} else if($action.equals("updatehosts")) {if(!API_UPDATEHOSTS ) return API_RETURN_FORBIDDEN;return API_RETURN_SUCCEED;} else if($action.equals("updateapps")) {if(!API_UPDATEAPPS ) return API_RETURN_FORBIDDEN;return API_RETURN_SUCCEED;} else if($action.equals("updatecredit")) {//if(!UPDATECREDIT ) return API_RETURN_FORBIDDEN;return API_RETURN_SUCCEED;} else if($action.equals("getcreditsettings")) {//if(!GETCREDITSETTINGS ) return API_RETURN_FORBIDDEN;return "";//积分值} else if($action.equals("updatecreditsettings")) {if(!API_UPDATECREDITSETTINGS) return API_RETURN_FORBIDDEN;//同步代码return API_RETURN_SUCCEED;} else {return (API_RETURN_FORBIDDEN);}               return "";}private void parse_str(String str, Map<String,String> sets){if(str==null||str.length()<1)return;String[] ps = str.split("&");for(int i=0;i<ps.length;i++){String[] items = ps[i].split("=");if(items.length==2){sets.put(items[0], items[1]);}else if(items.length ==1){sets.put(items[0], "");}}}protected long time(){return System.currentTimeMillis()/1000;}private static long tolong(Object s){if(s!=null){String ss = s.toString().trim();if(ss.length()==0){return 0L;}else{return Long.parseLong(ss);}}else{return 0L;}}
}

2.Client.java


package com.fivestars.interfaces.bbs.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;/**
* ================================================
* Discuz! Ucenter API for JAVA
* ================================================
* UC Client 通用调用该类来实现与UC Server之间的通信。
* 该类实现与UC Server通信的所有接口函数
*
* 更多信息:http://code.google.com/p/discuz-ucenter-api-for-java/
* 作者:梁平 (no_ten@163.com)
* 创建时间:2009-2-20
*/
public class Client extends PHPFunctions{public static boolean IN_UC = true;public static String UC_IP = "127.0.0.1";public static String UC_API = "http://localhost/uc";public static String UC_CONNECT = "";public static String UC_KEY = "123456";public static String UC_APPID = "3";public static String UC_CLIENT_VERSION = "1.0";public static String UC_CLIENT_RELEASE = "20090212";public static String UC_ROOT = "";                //note 用户中心客户端的根目录 UC_CLIENTROOTpublic static String UC_DATADIR = UC_ROOT+"./data/";                //note 用户中心的数据缓存目录public static String UC_DATAURL = "UC_API"+"/data";                        //note 用户中心的数据 URLpublic static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post";public static String[] uc_controls = {};static {InputStream in = Client.class.getClassLoader().getResourceAsStream("config.properties");Properties properties = new Properties();try {properties.load(in);UC_API = properties.getProperty("UC_API");UC_IP = properties.getProperty("UC_IP");UC_KEY = properties.getProperty("UC_KEY");UC_APPID = properties.getProperty("UC_APPID");UC_CONNECT = properties.getProperty("UC_CONNECT");} catch (Exception e) {e.printStackTrace();}}protected String uc_serialize(String $arr, int $htmlon) {//return xml_serialize($arr, $htmlon);return $arr;}protected String uc_unserialize(String $s) {//include_once UC_ROOT.'./lib/xml.class.php';//return xml_unserialize($s);return $s;}protected String uc_addslashes(String $string, int $force , boolean $strip ) {
//                !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
//                if(!MAGIC_QUOTES_GPC || $force) {
//                        if(is_array($string)) {
//                                foreach($string as $key => $val) {
//                                        $string[$key] = uc_addslashes($val, $force, $strip);
//                                }
//                        } else {
//                                $string = addslashes($strip ? stripslashes($string) : $string);
//                        }
//                }return $string;}protected String daddslashes(String $string, int $force) {return uc_addslashes($string, $force, false);}protected String uc_stripslashes(String $string) {
//                !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
//                if(MAGIC_QUOTES_GPC) {
//                        return stripslashes($string);
//                } else {return $string;
//                }}public String uc_api_post(String $module, String $action, Map<String,Object> $arg ) {StringBuffer $s = new StringBuffer();String $sep = "";//foreach($arg as $k => $v) {for (String $k : $arg.keySet()) {//$k = ($k);Object $v = $arg.get($k);$k = urlencode($k);if($v.getClass().isAssignableFrom(Map.class)) {String $s2 = "";String $sep2 = "";//foreach($v as $k2 => $v2) {for(String $k2 : ((Map<String,Object>)$v).keySet() ){Object $v2 = ((Map<String,Object>)$v).get($k2);$k2 = urlencode($k2);$s2 += $sep2+"{"+$k+"}["+$k2+"]="+urlencode(uc_stripslashes( String.valueOf( $v2 )));$sep2 = "&";}$s.append($sep).append($s2);} else {$s.append($sep).append($k).append("=").append(urlencode(uc_stripslashes( String.valueOf($v) )));}$sep = "&";}String $postdata = uc_api_requestdata($module, $action, $s.toString(),"");return uc_fopen2(UC_API+"/index.php", 500000, $postdata, "", true, UC_IP, 20, true);}/*** 构造发送给用户中心的请求数据** @param string $module        请求的模块* @param string $action        请求的动作* @param string $arg                参数(会加密的方式传送)* @param string $extra                附加参数(传送时不加密)* @return string*/protected String uc_api_requestdata(String $module, String $action, String $arg, String $extra) {String $input = uc_api_input($arg);String $post = "m="+$module+"&a="+$action+"&inajax=2&release="+UC_CLIENT_RELEASE+"&input="+$input+"&appid="+UC_APPID+$extra;return $post;}protected String uc_api_url(String $module, String $action, String $arg, String $extra) {String $url = UC_API+"/index.php?"+uc_api_requestdata($module, $action, $arg, $extra);return $url;}public String uc_api_input(String $data) {//String $s = $data;//String $s = urlencode(uc_authcode($data+"&agent="+md5($_SERVER["HTTP_USER_AGENT"])+"&time="+time(), "ENCODE", UC_KEY));//String $s = urlencode(uc_authcode($data+"&agent="+md5("Java/1.5.0_01")+"&time="+time(), "ENCODE", UC_KEY));String $s = urlencode(uc_authcode($data+"&agent="+md5("")+"&time="+time(), "ENCODE", UC_KEY));return $s;}/*** MYSQL 方式取指定的模块和动作的数据** @param string $model                请求的模块* @param string $action        请求的动作* @param string $args                参数(会加密的方式传送)* @return mix*/public String uc_api_mysql(String $model, String $action, Map $args) {
//                global $uc_controls;
//                if(empty($uc_controls[$model])) {
//                        include_once UC_ROOT.'./lib/db.class.php';
//                        include_once UC_ROOT.'./model/base.php';
//                        include_once UC_ROOT."./control/$model.php";
//                        eval("\$uc_controls['$model'] = new {$model}control();");
//                }if($action.charAt(0) != '_') {
//                        $args = uc_addslashes($args, 1, true);
//                        $action = "on"+$action;
//                        $uc_controls[$model]->input = $args;
//                        return $uc_controls[$model]->$action($args);return null;} else {return "";}}/*** 字符串加密以及解密函数** @param string $string        原文或者密文* @param string $operation        操作(ENCODE | DECODE), 默认为 DECODE* @param string $key                密钥* @param int $expiry                密文有效期, 加密时候有效, 单位 秒,0 为永久有效* @return string                处理后的 原文或者 经过 base64_encode 处理后的密文** @example**         $a = authcode('abc', 'ENCODE', 'key');*         $b = authcode($a, 'DECODE', 'key');  // $b(abc)**         $a = authcode('abc', 'ENCODE', 'key', 3600);*         $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空*/public String uc_authcode(String $string, String $operation){return uc_authcode($string, $operation, null);}public String uc_authcode(String $string, String $operation, String $key){return uc_authcode($string, $operation, $key, 0);}public String uc_authcode(String $string, String $operation, String $key,int $expiry ) {int $ckey_length = 4;        //note 随机密钥长度 取值 0-32;//note 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。//note 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方//note 当此值为 0 时,则不产生随机密钥$key = md5( $key!=null ? $key : UC_KEY);String $keya = md5(substr($key, 0, 16));String $keyb = md5(substr($key, 16, 16));String $keyc = $ckey_length > 0? ($operation.equals("DECODE") ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : "";String $cryptkey = $keya + md5( $keya + $keyc);int $key_length = $cryptkey.length();$string = $operation.equals("DECODE") ? base64_decode(substr($string, $ckey_length)) : sprintf("%010d", $expiry>0 ? $expiry + time() : 0)+substr(md5($string+$keyb), 0, 16)+$string;int $string_length = $string.length();StringBuffer $result1 = new StringBuffer();int[] $box = new int[256];for(int i=0;i<256;i++){$box[i] = i;}int[] $rndkey = new int[256];for(int $i = 0; $i <= 255; $i++) {$rndkey[$i] = (int)$cryptkey.charAt($i % $key_length);}int $j=0;for(int $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;int $tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}$j=0;int $a=0;for(int $i = 0; $i < $string_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;int $tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$result1.append((char)( ((int)$string.charAt($i)) ^ ($box[($box[$a] + $box[$j]) % 256])));}if($operation.equals("DECODE")) {String $result = $result1.substring(0, $result1.length());if((Integer.parseInt(substr($result.toString(), 0, 10)) == 0 || Long.parseLong(substr($result.toString(), 0, 10)) - time() > 0) && substr($result.toString(), 10, 16).equals( substr(md5(substr($result.toString(), 26)+ $keyb), 0, 16))) {return substr($result.toString(), 26);} else {return "";}} else {return $keyc+base64_encode($result1.toString()).replaceAll("=", "");}}/***  远程打开URL*  @param string $url                打开的url, 如 http://www.baidu.com/123.htm*  @param int $limit                取返回的数据的长度*  @param string $post                要发送的 POST 数据,如uid=1&password=1234*  @param string $cookie        要模拟的 COOKIE 数据,如uid=123&auth=a2323sd2323*  @param bool $bysocket        TRUE/FALSE 是否通过SOCKET打开*  @param string $ip                IP地址*  @param int $timeout                连接超时时间*  @param bool $block                是否为阻塞模式 defaul valuet:true*  @return                        取到的字符串*/protected String uc_fopen2(String $url, int $limit , String $post, String $cookie, boolean $bysocket, String $ip, int $timeout, boolean $block) {
//                long $__times__ = isset($_GET["__times__"]) ? intval($_GET["__times__"]) + 1 : 1;
//                if($__times__ > 2) {
//                        return "";
//                }$url += $url.indexOf("?")>0? "&" : "?"  +"__times__=1";return uc_fopen($url, $limit, $post, $cookie, $bysocket, $ip, $timeout, $block);}protected String uc_fopen(String $url, int $limit, String $post, String $cookie, boolean $bysocket ,String $ip , int $timeout , boolean $block ) {String $return = "";URL $matches;String $host="";String $path="";int $port = 80;try {$matches = new URL($url);$host = $matches.getHost();$path = $matches.getPath()!=null? $matches.getPath()+($matches.getQuery()!=null?"?"+$matches.getQuery():""):"/";if( $matches.getPort()>0 ) $port = $matches.getPort();} catch (MalformedURLException e1) {}StringBuffer $out = new StringBuffer();if($post!=null && $post.length()>0) {$out.append("POST ").append($path).append(" HTTP/1.0\r\n");$out.append("Accept: */*\r\n");$out.append("Accept-Language: zh-cn\r\n");$out.append("Content-Type: application/x-www-form-urlencoded\r\n");$out.append("User-Agent: \r\n");$out.append("Host: ").append($host).append("\r\n");$out.append("Content-Length: ").append($post.length()).append("\r\n");$out.append("Connection: Close\r\n");$out.append("Cache-Control: no-cache\r\n");$out.append("Cookie: \r\n\r\n");$out.append($post);} else {$out.append("GET $path HTTP/1.0\r\n");$out.append( "Accept: */*\r\n");//$out .= "Referer: $boardurl\r\n";$out.append("Accept-Language: zh-cn\r\n");$out.append("User-Agent: Java/1.5.0_01\r\n");$out.append("Host: $host\r\n");$out.append("Connection: Close\r\n");$out.append("Cookie: $cookie\r\n\r\n");}try{Socket $fp = new Socket($ip!=null && $ip.length()>10? $ip : $host, $port );if(!$fp.isConnected()) {return "";//note $errstr : $errno \r\n} else {OutputStream os = $fp.getOutputStream();os.write($out.toString().getBytes());InputStream ins = $fp.getInputStream();                                BufferedReader reader = new BufferedReader(new InputStreamReader(ins));while (true) {String $header = reader.readLine();if($header == null || $header.equals("") || $header == "\r\n" || $header == "\n") {break;}}while (true) {String $data = reader.readLine();if($data == null || $data.equals("") ) {break;}else{$return+=$data;}}$fp.close();}}catch (IOException e) {}return $return;}public String uc_app_ls() {String $return = call_user_func(UC_API_FUNC, "app", "ls", null);return UC_CONNECT.equals("mysql") ? $return : uc_unserialize($return);}/*** 用户注册** @param string $username         用户名* @param string $password         密码* @param string $email                Email* @param int $questionid        安全提问* @param string $answer         安全提问答案* @return int-1 : 用户名不合法-2 : 包含不允许注册的词语-3 : 用户名已经存在-4 : email 格式有误-5 : email 不允许注册-6 : 该 email 已经被注册>1 : 表示成功,数值为 UID*/public String uc_user_register(String $username, String $password, String $email){return uc_user_register($username, $password, $email, "", "");}public String uc_user_register(String $username, String $password, String $email, String $questionid, String $answer) {Map<String ,Object> args = new HashMap<String, Object>();args.put("username",$username);args.put("password",$password);args.put("email",$email);args.put("questionid",$questionid);args.put("answer",$answer);return call_user_func(UC_API_FUNC, "user", "register", args);}/*** 用户登陆检查** @param string $username        用户名/uid* @param string $password        密码* @param int $isuid                是否为uid* @param int $checkques        是否使用检查安全问答* @param int $questionid        安全提问* @param string $answer         安全提问答案* @return array (uid/status, username, password, email)数组第一项1  : 成功-1 : 用户不存在,或者被删除-2 : 密码错*/public String uc_user_login(String $username, String $password){return uc_user_login($username, $password, 0, 0);}public String uc_user_login(String $username, String $password, int $isuid , int $checkques ){return uc_user_login($username, $password, $isuid, $checkques, "","");}public String uc_user_login(String $username, String $password, int $isuid , int $checkques , String $questionid, String $answer) {Map<String,Object> args = new HashMap<String, Object>();args.put("username",$username);args.put("password",$password);args.put("isuid",$isuid);args.put("checkques",$checkques);args.put("questionid", $questionid);args.put("answer",$answer);String $return = call_user_func(UC_API_FUNC, "user", "login", args);return UC_CONNECT .equals("mysql") ? $return : uc_unserialize($return);}/*** 进入同步登录代码** @param int $uid                用户ID* @return string                 HTML代码*/public String uc_user_synlogin(int $uid) {Map<String, Object> args = new HashMap<String, Object>();args.put( "uid",$uid);String $return = uc_api_post("user", "synlogin", args);return $return;}/*** 进入同步登出代码** @return string                 HTML代码*/public String uc_user_synlogout() {String $return = uc_api_post("user", "synlogout", new HashMap<String, Object>());return $return;}/*** 取得用户数据** @param string $username        用户名* @param int $isuid        是否为UID* @return array (uid, username, email)*/public String uc_get_user(String $username, int $isuid) {Map<String,Object> args = new HashMap<String, Object>();args.put("username",$username );args.put("isuid", $isuid );String $return = call_user_func(UC_API_FUNC, "user", "get_user", args);return UC_CONNECT.equals("mysql") ? $return : uc_unserialize($return);}/*** 编辑用户** @param string $username        用户名* @param string $oldpw                旧密码* @param string $newpw                新密码* @param string $email                Email* @param int $ignoreoldpw         是否忽略旧密码, 忽略旧密码, 则不进行旧密码校验.* @param int $questionid        安全提问* @param string $answer         安全提问答案* @return int1  : 修改成功0  : 没有任何修改-1 : 旧密码不正确-4 : email 格式有误-5 : email 不允许注册-6 : 该 email 已经被注册-7 : 没有做任何修改-8 : 受保护的用户,没有权限修改*/public String uc_user_edit(String $username, String $oldpw, String $newpw, String $email, int $ignoreoldpw, String $questionid, String $answer) {Map<String,Object> args = new HashMap<String, Object>();                 args.put("username", $username);args.put("oldpw",$oldpw);args.put("newpw",$newpw);args.put("email",$email);args.put("ignoreoldpw",$ignoreoldpw);args.put("questionid", $questionid);args.put("answer", $answer);return call_user_func(UC_API_FUNC, "user", "edit", args);}/*** 删除用户** @param string/array $uid        用户的 UID* @return int>0 : 成功0 : 失败*/public String uc_user_delete(String $uid) {Map<String,Object> args = new HashMap<String, Object>();        args.put("uid",$uid);return call_user_func(UC_API_FUNC, "user", "delete", args);}/*** 删除用户头像** @param string/array $uid        用户的 UID*/public String uc_user_deleteavatar(String $uid) {Map<String,Object> args = new HashMap<String, Object>();        args.put("uid",$uid);return uc_api_post("user", "deleteavatar", args);}
}

3.PHPFunctions.java


package com.fivestars.interfaces.bbs.client;import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;import com.fivestars.interfaces.bbs.util.Base64;
/*** ================================================* Discuz! Ucenter API for JAVA* ================================================* 构造本接口运行所需要PHP的内置函数* * 更多信息:http://code.google.com/p/discuz-ucenter-api-for-java/* 作者:梁平 (no_ten@163.com) * 创建时间:2009-2-20*/
public abstract class PHPFunctions {//JAVA EXTRA METHODprotected String urlencode(String value){return URLEncoder.encode(value);}protected String md5(String input){MessageDigest md;try {md = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}        return byte2hex(md.digest(input.getBytes()));}protected String md5(long input){return md5(String.valueOf(input));}protected String base64_decode(String input){try {return new String(com.fivestars.interfaces.bbs.util.Base64.decode(input.toCharArray()),"iso-8859-1");} catch (Exception e) {return e.getMessage();}}protected String base64_encode(String input){try {return new String(Base64.encode(input.getBytes("iso-8859-1")));} catch (Exception e) {return e.getMessage();}}protected String byte2hex(byte[] b) {StringBuffer hs = new StringBuffer();String stmp = "";for (int n = 0; n < b.length; n++) {stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));if (stmp.length() == 1)hs.append("0").append(stmp);elsehs.append(stmp);}return hs.toString();}protected String substr(String input,int begin, int length){return input.substring(begin, begin+length);}protected String substr(String input,int begin){if(begin>0){return input.substring(begin);}else{return input.substring(input.length()+ begin);}}protected long microtime(){return System.currentTimeMillis();}protected long time(){return System.currentTimeMillis()/1000;}        protected String sprintf(String format, long input){String temp = "0000000000"+input;return temp.substring(temp.length()-10);}protected String call_user_func(String function, String model, String action, Map<String,Object> args){if("uc_api_mysql".equals(function)){return this.uc_api_mysql(model, action, args);}if("uc_api_post".equals(function)){return this.uc_api_post(model, action, args);}return "";}public abstract String uc_api_post(String $module, String $action, Map<String,Object> $arg );public abstract String uc_api_mysql(String $model, String $action, Map $args);
}
4.Base64.java


/* ========================================================================* JCommon : a free general purpose class library for the Java(tm) platform* ========================================================================** (C) Copyright 2000-2004, by Object Refinery Limited and Contributors.** Project Info:  http://www.jfree.org/jcommon/index.html** This library is free software; you can redistribute it and/or modify it under the terms* of the GNU Lesser General Public License as published by the Free Software Foundation;* either version 2.1 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.* See the GNU Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public License along with this* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,* Boston, MA 02111-1307, USA.** [Java is a trademark or registered trademark of Sun Microsystems, Inc.* in the United States and other countries.]** -------------------------------------* AbstractElementDefinitionHandler.java* -------------------------------------* (C)opyright 2003, by Thomas Morgner and Contributors.** Original Author:  Kevin Kelley <kelley@ruralnet.net> -*                   30718 Rd. 28, La Junta, CO, 81050  USA.                                                         //** $Id: Base64.java,v 1.5 2004/01/01 23:59:29 mungady Exp $** Changes* -------------------------* 23.09.2003 : Initial version**/
package com.fivestars.interfaces.bbs.util;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;/*** Provides encoding of raw bytes to base64-encoded characters, and* decoding of base64 characters to raw bytes.* date: 06 August 1998* modified: 14 February 2000* modified: 22 September 2000** @author Kevin Kelley (kelley@ruralnet.net)* @version 1.3*/
public class Base64 {/*** returns an array of base64-encoded characters to represent the* passed data array.** @param data the array of bytes to encode* @return base64-coded character array.*/public static char[] encode(byte[] data) {char[] out = new char[((data.length + 2) / 3) * 4];//// 3 bytes encode to 4 chars.  Output is always an even// multiple of 4 characters.//for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {boolean quad = false;boolean trip = false;int val = (0xFF & data[i]);val <<= 8;if ((i + 1) < data.length) {val |= (0xFF & data[i + 1]);trip = true;}val <<= 8;if ((i + 2) < data.length) {val |= (0xFF & data[i + 2]);quad = true;}out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];val >>= 6;out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = alphabet[val & 0x3F];val >>= 6;out[index + 0] = alphabet[val & 0x3F];}return out;}/*** Decodes a BASE-64 encoded stream to recover the original* data. White space before and after will be trimmed away,* but no other manipulation of the input will be performed.** As of version 1.2 this method will properly handle input* containing junk characters (newlines and the like) rather* than throwing an error. It does this by pre-parsing the* input and generating from that a count of VALID input* characters.**/public static byte[] decode(char[] data) {// as our input could contain non-BASE64 data (newlines,// whitespace of any sort, whatever) we must first adjust// our count of USABLE data so that...// (a) we don't misallocate the output array, and// (b) think that we miscalculated our data length//     just because of extraneous throw-away junkint tempLen = data.length;for (int ix = 0; ix < data.length; ix++) {if ((data[ix] > 255) || codes[data[ix]] < 0)--tempLen; // ignore non-valid chars and padding}// calculate required length://  -- 3 bytes for every 4 valid base64 chars//  -- plus 2 bytes if there are 3 extra base64 chars,//     or plus 1 byte if there are 2 extra.int len = (tempLen / 4) * 3;if ((tempLen % 4) == 3)len += 2;if ((tempLen % 4) == 2)len += 1;byte[] out = new byte[len];int shift = 0; // # of excess bits stored in accumint accum = 0; // excess bitsint index = 0;// we now go through the entire array (NOT using the 'tempLen' value)for (int ix = 0; ix < data.length; ix++) {int value = (data[ix] > 255) ? -1 : codes[data[ix]];if (value >= 0)// skip over non-code{accum <<= 6; // bits shift up by 6 each time thrushift += 6; // loop, with new bits being put inaccum |= value; // at the bottom.if (shift >= 8)// whenever there are 8 or more shifted in,{shift -= 8; // write them out (from the top, leaving anyout[index++] = // excess at the bottom for next iteration.(byte) ((accum >> shift) & 0xff);}}// we will also have skipped processing a padding null byte ('=') here;// these are used ONLY for padding to an even length and do not legally// occur as encoded data. for this reason we can ignore the fact that// no index++ operation occurs in that special case: the out[] array is// initialized to all-zero bytes to start with and that works to our// advantage in this combination.}// if there is STILL something wrong we just have to throw up now!if (index != out.length) {throw new Error("Miscalculated data length (wrote " +index + " instead of " + out.length + ")");}return out;}//// code characters for values 0..63//private static char[] alphabet ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();//// lookup table for converting base64 characters to value in range 0..63//private static byte[] codes = new byte[256];static {for (int i = 0; i < 256; i++)codes[i] = -1;for (int i = 'A'; i <= 'Z'; i++)codes[i] = (byte) (i - 'A');for (int i = 'a'; i <= 'z'; i++)codes[i] = (byte) (26 + i - 'a');for (int i = '0'; i <= '9'; i++)codes[i] = (byte) (52 + i - '0');codes['+'] = 62;codes['/'] = 63;}///// remainder (main method and helper functions) is// for testing purposes only, feel free to clip it.///public static void main(String[] args) {boolean decode = false;if (args.length == 0) {System.out.println("usage:  java Base64 [-d[ecode]] filename");System.exit(0);}for (int i = 0; i < args.length; i++) {if ("-decode".equalsIgnoreCase(args[i]))decode = true;else if ("-d".equalsIgnoreCase(args[i]))decode = true;}String filename = args[args.length - 1];File file = new File(filename);if (!file.exists()) {System.out.println("Error:  file '" + filename + "' doesn't exist!");System.exit(0);}if (decode) {char[] encoded = readChars(file);byte[] decoded = decode(encoded);writeBytes(file, decoded);}else {byte[] decoded = readBytes(file);char[] encoded = encode(decoded);writeChars(file, encoded);}}private static byte[] readBytes(File file) {ByteArrayOutputStream baos = new ByteArrayOutputStream();try {InputStream fis = new FileInputStream(file);InputStream is = new BufferedInputStream(fis);int count = 0;byte[] buf = new byte[16384];while ((count = is.read(buf)) != -1) {if (count > 0)baos.write(buf, 0, count);}is.close();}catch (Exception e) {e.printStackTrace();}return baos.toByteArray();}private static char[] readChars(File file) {CharArrayWriter caw = new CharArrayWriter();try {Reader fr = new FileReader(file);Reader in = new BufferedReader(fr);int count = 0;char[] buf = new char[16384];while ((count = in.read(buf)) != -1) {if (count > 0)caw.write(buf, 0, count);}in.close();}catch (Exception e) {e.printStackTrace();}return caw.toCharArray();}private static void writeBytes(File file, byte[] data) {try {OutputStream fos = new FileOutputStream(file);OutputStream os = new BufferedOutputStream(fos);os.write(data);os.close();}catch (Exception e) {e.printStackTrace();}}private static void writeChars(File file, char[] data) {try {Writer fos = new FileWriter(file);Writer os = new BufferedWriter(fos);os.write(data);os.close();}catch (Exception e) {e.printStackTrace();}}///// end of test code.///}

5.XMLHelper.java

package com.fivestars.interfaces.bbs.util;import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.LinkedList;import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;import com.sun.org.apache.xerces.internal.parsers.DOMParser;
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;/*** ================================================* Discuz! Ucenter API for JAVA* ================================================* XML工具类,处理UC Client接收到返回结果。* UC Client会收到UC Server返回的XML结果* 该类将XML中的数据提取成一个List按顺序读取即可。* * 更多信息:http://code.google.com/p/discuz-ucenter-api-for-java/* 作者:梁平 (no_ten@163.com) * 创建时间:2009-2-20*/
public class XMLHelper {public static LinkedList<String> uc_unserialize(String input){LinkedList<String> result = new LinkedList<String>();DOMParser parser = new DOMParser();try {                        parser.parse(new InputSource(new StringReader(input)));Document doc = parser.getDocument();NodeList nl = doc.getChildNodes().item(0).getChildNodes();int length = nl.getLength();for(int i=0;i<length;i++){if(nl.item(i).getNodeType()==Document.ELEMENT_NODE)result.add(nl.item(i).getTextContent());}} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return result;}
}

6.Test.java

package test;import java.util.LinkedList;import com.fivestars.interfaces.bbs.client.Client;
import com.fivestars.interfaces.bbs.util.XMLHelper;/*** ================================================* Discuz! Ucenter API for JAVA* ================================================* 测试类* 示例:本类实现在如何实现在登入/登出,以及注册。* * 更多信息:http://code.google.com/p/discuz-ucenter-api-for-java/* 作者:梁平 (no_ten@163.com) * 创建时间:2009-2-20*/
public class Test {/*** @param args*/public static void main(String[] args) {testLogin();Client uc = new Client();String s = uc.uc_authcode("8485m7QEfsvnOg9tKGvAsxlwXpAzZU6LhFA04pD6N0XIYG1cJVDh2Th83Qcci130UPHbXp+UNG0","DECODE");System.out.println(s);}public static void testLogin(){Client e = new Client();String result = e.uc_user_login("admin", "123456");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) {System.out.println("登录成功");System.out.println($username);System.out.println($password);System.out.println($email);String $ucsynlogin = e.uc_user_synlogin($uid);System.out.println("登录成功"+$ucsynlogin);//本地登陆代码//TODO ... ....} else if($uid == -1) {System.out.println("用户不存在,或者被删除");} else if($uid == -2) {System.out.println("密码错");} else {System.out.println("未定义");}}else{System.out.println("Login failed");System.out.println(result+"1");}}public static void testLogout(){Client uc = new Client();//setcookie('Example_auth', '', -86400);
//		生成同步退出的代码String $ucsynlogout = uc.uc_user_synlogout();System.out.println("退出成功"+$ucsynlogout);}public static void testRegister(){Client uc = new Client();//setcookie('Example_auth', '', -86400);
//		生成同步退出的代码String $returns = uc.uc_user_register("cccc", "ccccc" ,"ccc@abc.com" );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("用户名已经存在");} else if($uid == -4) {System.out.print("Email 格式有误");} else if($uid == -5) {System.out.print("Email 不允许注册");} else if($uid == -6) {System.out.print("该 Email 已经被注册");} else {System.out.print("未定义");}} else {System.out.println("OK:"+$returns);}}
}

有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。

这篇关于有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995769

相关文章

找完工作该补充的东西

首先: 锻炼身体,包括乒乓球,羽毛球,都必须练习,学习,锻炼身体等是一个很重要的与人交际沟通的方式; 打牌,娱乐:会玩是一个人很重要的交际沟通的法宝; 摄影:这个是一个兴趣爱好,也是提高自己的审美,生活品质,当然也是与人沟通的重要途径; 做饭:这个的话就是对自己,对朋友非常有益的一件事情;

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

[职场] 护理专业简历怎么写 #经验分享#微信

护理专业简历怎么写   很多想成为一名护理方面的从业者,但是又不知道应该怎么制作一份简历,现在这里分享了一份护理方面的简历模板供大家参考。   蓝山山   年龄:24   号码:12345678910   地址:上海市 邮箱:jianli@jianli.com   教育背景   时间:2011-09到2015-06   学校:蓝山大学   专业:护理学   学历:本科

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。