java web与discuz社区整合(二)

来源:互联网 发布:数据挖掘看什么书 编辑:程序博客网 时间:2024/05/01 09:42

上一篇讲到了java与discuz的测试程序,但是如果要整合已经存在的javaweb系统,还是要有很多地方要注意的。

    一:本地测试

    需要的条件:成套的javaweb系统,discuz,ucenter都安装在本地

            步骤:

1.按照第一篇的步骤,建立好通讯。保证ucenter的应用管理中显示通讯成功。

2.找到javaweb系统的登录处理函数,在保证系统验证用户存在的情况下,加上一些同步登录的处理程序:其中包括

(1)如果uc_user_login()返回的是用户不存在,那么要注册的时候,要通过uc_user_regsiter()注册,然后再登录。

(2)如果uc_user_login()返回的是用户密码错误。那么就应该是用uc_user_edit()修改密码,保证同步,然后再登录。

(3)调用$result = uc_user_login()成功登录后,会返回一段js代码。这个时候,你就要想办法通过各种方式,让它返回到页面中,然后再跳转。测试程序用的是  out.write($result )。但是问题来了,一般登录页面登录后,直接用重定向respose.resender(url)跳到主页。由于实践得比较少,在这个问题一直纠结了很久。

 想既用out.write()又想用respose.resender(url)。结果是不行的,会返回错误。因为write,flush()后就不能重复再向页面输出内容。这个时候就要回到基 础知识了。这是典型的向浏览器输送代码,然后跳转的问题。我们可以让它放在request的属性里面,然后再在jsp页面判断存不存在,存在的话就调用(用<%=%>,或者${XXX})都可以。输出后在用javascript的setTimeOut去调用window.location进行跳转。

登录需要加入的代码:(该代码结构混乱,仅做思路参考,请自行优化)

private void sync_login_forum(HttpServletRequest request,HttpServletResponse response,SysUser sysUser,String password){String name= sysUser.getAccount();String pwd = password;String email=name+"@utcip.com.cn";   System.out.println(name+","+pwd+","+email); Client uc = new Client(); String $result =uc.uc_user_login(name, pwd); System.out.println($result); String $ucsynlogin=""; LinkedList<String> rs = XMLHelper.uc_unserialize($result); String $username=null; String $password=null; int $uid=0; if(rs.size()>0){   $uid = Integer.parseInt(rs.get(0));  $username = rs.get(1);  $password = rs.get(2);  System.out.println($username+","+$password+","+$uid);if($uid > 0){ $ucsynlogin = uc.uc_user_synlogin($uid); System.out.println("ucsy:"+$ucsynlogin);}else if($uid == -1){System.out.println("用户不存在,或者被删除,正在注册");String $reg_return = uc.uc_user_register(name, pwd,email);System.out.println($reg_return);int $reg_uid = Integer.parseInt($reg_return);if($reg_uid <=0){if($uid ==-1){System.out.println("用户名不合法或没有邮箱");}else if($uid == -2){System.out.println("包含要允许注册的词语");}else if($uid == -3){System.out.println("用户名已经存在");}else if($uid == -4){System.out.println("Email 格式有误");}else if($uid == -5){System.out.println("Email 不允许注册");}else {System.out.println("未定义");}}else {System.out.println("OK,正在登陆");//登陆$result =uc.uc_user_login(name, pwd); rs = XMLHelper.uc_unserialize($result); if(rs.size()>0){   $uid = Integer.parseInt(rs.get(0));  $username = rs.get(1);  $password = rs.get(2);  System.out.println($username+","+$password+","+$uid);  if($uid > 0){ $ucsynlogin = uc.uc_user_synlogin($uid); System.out.println("ucsy:"+$ucsynlogin);  }   }}}else if($uid == -2){System.out.println("密码错误");String $res = uc.uc_user_edit(name, "123", pwd, email, 1);if("1".equals($res)){System.out.println("修改密码成功");System.out.println("正在登录");$result =uc.uc_user_login(name, pwd); rs = XMLHelper.uc_unserialize($result); if(rs.size()>0){   $uid = Integer.parseInt(rs.get(0));  $username = rs.get(1);  $password = rs.get(2);  System.out.println($username+","+$password+","+$uid);  if($uid > 0){ $ucsynlogin = uc.uc_user_synlogin($uid); System.out.println("ucsy:"+$ucsynlogin);  }  }else if("-1".equals($res)){System.out.println("旧密码不正确");}else{System.out.println("修改密码不成功");}}else{System.out.println("未定义");}  }// else if  //设置本地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");     response.addCookie(auth);     Cookie user = new Cookie("Discuz_loginuser", $username);     response.addCookie(user);          //request.getSession().setAttribute("$ucsynlogin", $ucsynlogin);    request.setAttribute("$ucsynlogin", $ucsynlogin);    // request.setAttribute("test", "<script type=\"text/javascript\">alert('11');</script>");         System.out.println(request.getContextPath()+"/platform/console/main.ht");     request.getRequestDispatcher("/platform/console/main.ht").forward(request, response);     //response.sendRedirect("http://localhost/forum.php");        }catch(Exception e){    e.printStackTrace();    }      }}



    二:服务器测试

     需要条件:discuz,ucenter,javaweb 必须安装在同一个主机上。

步骤:

1.首先,在服务器重新安装discuz,选择自带的ucenter。尽量不要复制代码去服务端,不然很多与数据库,ucenter的配置信息要改。

2.重新配置ucenter的应用通信,指导通讯成功为止。通讯成功了,不代表两边就可以正常通信。

3.尝试同步登录,会发现sax解析xml文件错误。断点调试下,发现$result = uc_user_login()返回的是“代理不合法,无法访问”的英文字样。这个时候自己要认真检查配置文件。特别是java端的config.propertes。确保discuz下的config/uc_ucenter的配置文件没有错,还有ucenter端的data/config.inc配置没错。都确认没错了,还是不行,请重启服务器。

4.成功登陆后,发现不能跳到主界面,那么应该就是jsp的跳转路径写错了。

5.java web那边已经有账号,但是在discuz是第一次登陆的时候,需要手动登录。解决方法:

  在uc_server/model/user.php 文件中,找到adduser() 注意:网上很多说是uc_client,其实uc_client是discuz添加账号时所调用的函数。本人研究了很久,从javaweb添加账号,会先到uc服务器的,uc服务器调用uc_server/model/user.php

在后面加上

$this->db->query("INSERT INTO pre_common_member SET `uid`='".$uid."',`username`='".$username."',`password`='".$password."',`email`='".$email."',`adminid`='0',`groupid`='10',`regdate`='".$this->base->time."',`credits`='0',`timeoffset`='9999'");$this->db->query("INSERT INTO pre_common_member_status SET `uid`='".$uid."',`regip`='".$regip."',`lastip`='".$regip."',`lastvisit`='1308642137',`lastactivity`='1308642137',`lastpost`='0',`lastsendmail`='0'");$this->db->query("INSERT INTO pre_common_member_profile SET `uid`='".$uid."'");$this->db->query("INSERT INTO pre_common_member_field_forum SET `uid`='".$uid."'");$this->db->query("INSERT INTO pre_common_member_field_home SET `uid`='".$uid."'");$this->db->query("INSERT INTO pre_common_member_count SET `uid`='".$uid."',`extcredits1`='0',`extcredits2`='0',`extcredits3`='0',`extcredits4`='0',`extcredits5`='0',`extcredits6`='0',`extcredits7`='0',`extcredits8`='0'");


那么加完后就变成这样了

function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {$regip = empty($regip) ? $this->base->onlineip : $regip;$salt = substr(uniqid(rand()), -6);$password = md5(md5($password).$salt);$sqladd = $uid ? "uid='".intval($uid)."'," : '';$sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");$uid = $this->db->insert_id();$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");// BEGIN$this->db->query("INSERT INTO `dbname`.pre_common_member SET uid='$uid', username='$username', password='$password', email='$email', adminid='0', groupid='10', regdate='".$this->base->time."', credits='0', timeoffset='9999'");$this->db->query("INSERT INTO `dbname`.pre_common_member_status SET uid='$uid', regip='$regip', lastip='$regip', lastvisit='".$this->base->time."', lastactivity='".$this->base->time."', lastpost='0', lastsendmail='0'");$this->db->query("INSERT INTO `dbname`.pre_common_member_profile SET uid='$uid'");$this->db->query("INSERT INTO `dbname`.pre_common_member_field_forum SET uid='$uid'");$this->db->query("INSERT INTO `dbname`.pre_common_member_field_home SET uid='$uid'");$this->db->query("INSERT INTO `dbname`.pre_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");// ENDreturn $uid;}




0 0
原创粉丝点击