我刚刚自己用ubuntu discuz搭建建了一个论坛,然后我还有另外的一个web站点,怎么实现同步登陆?

当前访客身份:游客 [
不能慢慢来
:老师好 求整个工程源码 ...
:楼主你好,discuz登录不能同步到java应用,我看了...
:大神好,我想问一下,discuz登录java应用没反应,...
:引用来自“背靠背”的评论同步登录时,得到用户名...
:同步登录时,得到用户名和密码,但$ucsynlogin =...
:楼主你好!我在第三步的时候,用户名,密码都得到...
:总与解决了這个问题,详细看這里,http://www.12...
:显示通信成功,接口方式也打开,点击UCenter里的...
:引用来自“xieqingsheng”的评论为什么生成的js用...
:引用来自“xieqingsheng”的评论为什么生成的js用...
今日访问:5
昨日访问:18
本周访问:23
本月访问:236
所有访问:6462
java整合discuz小结(实现与论坛同步登录等操作)
发表于2年前( 23:24)&&
阅读(7691)&|&评论()
0人收藏此文章,
&&&&& & 最近笔者在实现java项目对discuz的整合。在此过程中,查了很多这方面的资料,发现网上并没有说得比较全面的文章。笔者博取众长以及自己在此过程中遇到的问题,写下来供大家参考,希望大家可以在这过程中少走弯路。笔者在此过程中主要参考了后,感谢作者ping china.大家可以到此下载接口。
&&&&& & 第一步:写好你的配置文件config.properties。& & &
&&&&&&&&UC_API = http://你的discuz地址/uc_server &如http://localhost/forum/uc_server &&&&&&&&UC_IP = 正常情况下留空即可 &&&&&&&&UC_KEY = 123456(与ucenter通信的密钥,这里自己设定,需与discuz ucenter一支) &&&&&&&&UC_APPID = 2 &&&&&&&&UC_CONNECT = 正常情况下留空即可
&&&&& & 第二步:在你的web.xml里加上& & & &&
&!-- servlet 'disuz_uc_api' 用于接收Discuz UCenter的同步消息, 此项配置必须有。(可适当调整 load-on-startup参数) --&
&servlet-name&disuz_uc_api&/servlet-name&
&servlet-class&com.fivestars.interfaces.bbs.api.UC&/servlet-class&
&load-on-startup&2&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&disuz_uc_api&/servlet-name&
&url-pattern&/api/uc.php&/url-pattern&
&/servlet-mapping&
&&&&& & 第三步:配置ucenter.
&&&&& & 以管理员身份登录-》管理中心-》ucenter-》应用管理。
&&&&& & 填写以下信息:应用名称:你的应用的名称
&&&&& & 通信密钥:你刚在config.properties的UC_KEY (123456)
&&&&& & 是否开启同步登录:是
&&&&& & 是否接受通知:是
&&&&& & 其他的留空即可。
&&&&& & 然后我们先试一下登录,以下是测试代码。(到这里还不支持中文,后面会提到)
public static String login(String userName,String pwd){
Client e = new Client();
String result = e.uc_user_login(userName, pwd);
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 = e.uc_user_synlogin($uid);
} else if($uid == -1) {
System.out.println("用户不存在,或者被删除");
} else if($uid == -2) {
System.out.println("密码错");
System.out.println("未定义");
System.out.println("Login failed");
System.out.println(result);
& & 建一个测试类,把这个方法加进去,然后调用此方法,传参数值用户名和密码,然后返回的是一个string。string的内容是一段js代码。只要把这段js代码输出到页面上去就实现了discuz那边的登录了。你可以先试试把这段js输入到浏览器的地址栏。
& & 退出测试代码:
&&&&&&&&public static String logout(){
Client uc = new Client();
String $ucsynlogout = uc.uc_user_synlogout();
System.out.println("退出成功"+$ucsynlogout);
& & 此方法也是返回一段js。输出页面即可,测试时可以先在浏览器地址栏输入。
& & 注册测试代码:
public static void reg(String userName, String password, String email) {
Client uc = new Client();
String $returns = uc.uc_user_register(userName, password ,email);
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 已经被注册");
System.out.print("未定义");
System.out.println("OK:------------------------"+$returns);
到这里,还只是实现了java项目登录后论坛那边能自动登录,但论坛那边登录了,java这边还没登录。别急,我们先解决一下中文用户名的问题,其实这个问题里已经提到了,并提供了解决方案。感谢原作者。但我还是啰嗦一下,因为我感觉说的不够详细,大家可能要花去你的宝贵时间去了解。解决方法如下:
&&&&& & 在PHPFuctions.java里有一个名叫urlencode的方法。
&&&&& & 只要用以下方法重载一下就好& &&& &&
&&&&protected String urlencode(String value,String code){
return URLEncoder.encode(value,code);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
&&&&& & 并把Client.java里的uc_api_input方法改成如下& & &
public String uc_api_input(String $data) {
String $s = urlencode(uc_authcode($data+"&agent="+md5("")+"&time="+time(), "ENCODE"&&&&&&&&&&&&, UC_KEY),"GBK");
&&&&return $s;
&&&&& & 好!java中文登录问题解决了。我们来看看discuz那边登录了,java这边怎么实现同步登录。在uc.java里有一个doanswer的方法。所有同步操作都在这个方法里完成。其逻辑是这样的,uc这个类继承了HttpServlet。当ucenter发出通知时,会访问这个servlet.并执行他的doGet()方法。doGet()调用doAnswer().
&&&&&&&&String $code = request.getParameter("code");会传一个code进来(加密了的)。然后调用$code = new Client().uc_authcode($code, "DECODE");进行解密操作。新建一个Map,Map&String,String& $get = new HashMap&String, String&();然后根据解密出来的code的内容封装这个Map.调用这个方法,parse_str($code, $get); 经过以上操作后,所有同步操作需要的信息都在map里,如action。action代表的是什么操作,如同步登录,同步退出,修改密码等。还有其他信息,如username.登录的用户名。改密码时还会传新密码过来。所有的这些都包含在这个叫$get的Map里。然后我们就可以进行我们自己的逻辑操作了。(以上逻辑不想理解没关系,你只要知道当你在discuz登录之后,uc.java的doAnswer()方法就会被调用,你所需要的一切信息都包含在$get这个Map里)
&&&&& & 操作到这里,你一定想吐槽笔者!不行啊,discuz那边登录了,java这边完全没反应啊!!doAnswer方法没有被调用啊!是的,你还需要到discuz后台做一些设置。管理中心-&站长-&ucenter设置。把ucenter连接方式改为接口方式。然后,你登录discuz时,doAnswer()方法就会被调用了。(其他操作如退出也一样)
&&&&& & 到这里,我们又遇到了中文的问题了,discuz用中文登录的时候不行啊!是的,这确实是个比较麻烦的问题。笔者也弄了好久。原因是这样的,上面提到过,传进来的$code是需要uc_authcode()方法进行解密的,当中文的时候解密出来的$code是"".解决方法如下:在Client.java的uc_authcode()方法里找到这句String $result = $result1.substring(0, $result1.length());并把它改成:& & & &&
String $result= $result1.toString();
$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");可能有人会说直接转成utf-8不行吗?为什么要先转成gbk呢?如果直接转成utf-8的话,解密出来的$code是""。到此中文的问题就得到解决了。笔者下载的是GBK版本的discuz,其他情况自己改一下编码应该没问题。
&&&&& & 至此,只要我们在doAnswer()方法里添加我们自己的逻辑代码就已经能实现java和discuz的同步了。另外,有个问题提醒大家,就是在discuz那边修改密码的时候,ucenter并不是马上发出通知的,这可能会引起同步和安全的问题。
& & & & 可能有地方写漏了!!如有相关问题需要了解可留言 &
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
我用laravel写了一个网站想和一个discuz论坛实现登录同步,用ucenter好实现吗?有人做过吗?希望能提供一下思路 谢谢
有实现吗?
要回复问题请先或
关注: 3 人我有自己的虚拟主机 下载了一个Discuz! X2.5 正式版 上传到空间web文件夹 为啥访问的时候显示_百度知道
我有自己的虚拟主机 下载了一个Discuz! X2.5 正式版 上传到空间web文件夹 为啥访问的时候显示
Directory Listing DeniedThis Virtual Directory does not allow contents to be listed.求解
我有更好的答案
是不是虚拟主机不允许放置论坛程序啊,虚拟主机做了限制,换成其他的程序试试,或者是联系虚拟主机商问问情况。一般上传上去打开肯定要出来安装界面的。
那怎么看限制呢
我上传网页不是一样的显示
?上传个公司网站看看啊 ,看看是不是限制不能做论坛了!或者联系服务商啊 问问就清楚了
是不是国外的空间无法连接云平台
可以的啊 云平台也没有限制空间的
这个怎么解决?
需要安装 考虑我这边.cn 30元,续费35元/年.com 52元,续费55元/年上海多线主机 100M 72元/年,免费备案。
百度搜“小新主机”,完美支持DiscuzX 2.5
其他类似问题
为您推荐:
web文件夹的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁本人有linux系统,想搭建一个discuz X2新版本的论坛~ apache,php,mysql都弄好了~ 请问怎么安装!~_百度知道
本人有linux系统,想搭建一个discuz X2新版本的论坛~ apache,php,mysql都弄好了~ 请问怎么安装!~
我下了那2个包在官网论坛上可是用UZIP命令解压错误··
提问者采纳
把discuz传到www的指定位置
设置好目录权限 按照install.php步骤链接数据库 一步一步做就ok
其他类似问题
为您推荐:
linux系统的相关知识
其他2条回答
指定WEB站点的根目录,把DZ放到根目录,在地址栏输入你站点的域名或IP地址,接着就是NEXT、NEXT
这些都有了上传程序搭建就好了
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 linux搭建discuz 的文章

 

随机推荐