Java整合Discuz同步登录注意事项
2017-11-10 16:50
645 查看
摘要: 笔者是写Java的,之前也没碰过PHP和Discuz,在整合登录的时候碰到了不少坑,在这里记录下
笔者是写Java的,之前也没碰过PHP和Discuz,在整合登录的时候碰到了不少坑,在这里记录下
http://www.cnblogs.com/netWild/archive/2013/06/28/3161164.html
Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] milliseconds
有两种解决办法:
1)在Tomcat环境中解决
可以通过配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。
2)在JVM环境中解决
打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom
参考连接:http://blog.csdn.net/trackal/article/details/52597645
![](http://8cd03f74.wiz03.com/share/resources/ca1113fe-894f-47c4-a02f-d672a1f1b20f/index_files/d0691aae-f489-4c3a-8f26-1eded6d3bdf3.png)
解决方法:
进入UCenter中,在应用管理中将Discuz的访问路径配置为论坛访问地址
![](http://8cd03f74.wiz03.com/share/resources/ca1113fe-894f-47c4-a02f-d672a1f1b20f/index_files/0d28ec82-69a3-4bc0-b68d-79d100ab88ea.png)
这里个人的解决方法是:
第一种方法:当调用Discuz登录接口返回script字符串后,在后端手动处理,添加一段跳转JS,这样页面会自动跳转到目标地址。
第二种方法:本质上Discuz就是通过script标签的跨域性来请求目标接口实现传递登录状态,可以在后端截取该url,返回给前端,由前端处理。
![](http://8cd03f74.wiz03.com/share/resources/ca1113fe-894f-47c4-a02f-d672a1f1b20f/index_files/ad3306d5-49bf-423d-b8a1-63ba8866f109.png)
这样设置后,只是在Discuz登录的时候不需要手动输入验证码来激活,但上面的问题还没有解决。
修改完后,同步注册后就会直接激活了,现在调用同步登录后就能直接同步登录状态了。
参考连接:http://blog.csdn.net/dongsg11200/article/details/24609783
修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码
如 Discuz X 的:多程序整合 UCenter,在新用户首次注册后是没有同步登录到其它程序的,也就是说用户得在其它程序用密码再登录一次,以后才能同步登录,还有就是用户不是在 Discuz 程序注册的话,在 Discuz 登录时得手动激活,这些都导致用户体验很不好,不过解决方法很简单~
修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码
如 Discuz X 的:
Discuz 的参数比较多,
我的是Discuz3.4,按照这种方法修改后并没有效果,可能是版本不同?。
参考连接:http://blog.csdn.net/iastro/article/details/52587643
参考连接2:https://www.cnblogs.com/seaning/p/3993068.html
笔者是写Java的,之前也没碰过PHP和Discuz,在整合登录的时候碰到了不少坑,在这里记录下
Java整合Discuz同步登录
具体代码和逻辑见一下连接http://www.cnblogs.com/netWild/archive/2013/06/28/3161164.html
个人整合时碰到的问题
首次访问时速度很慢
使用上面链接中的Demo时,在第一次调用的时候会卡上2分钟左右,控制台打印以下信息:Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] milliseconds
有两种解决办法:
1)在Tomcat环境中解决
可以通过配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。
2)在JVM环境中解决
打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom
参考连接:http://blog.csdn.net/trackal/article/details/52597645
调用登录返回html后页面报错
查看网页源码,发现script请求地址为127.0.0.1![](http://8cd03f74.wiz03.com/share/resources/ca1113fe-894f-47c4-a02f-d672a1f1b20f/index_files/d0691aae-f489-4c3a-8f26-1eded6d3bdf3.png)
解决方法:
进入UCenter中,在应用管理中将Discuz的访问路径配置为论坛访问地址
![](http://8cd03f74.wiz03.com/share/resources/ca1113fe-894f-47c4-a02f-d672a1f1b20f/index_files/0d28ec82-69a3-4bc0-b68d-79d100ab88ea.png)
调用登录后返回html空白页
虽然显示空白页,但是登录状态已经同步到Discuz了,只需要刷新下Discuz页面即可。这里个人的解决方法是:
第一种方法:当调用Discuz登录接口返回script字符串后,在后端手动处理,添加一段跳转JS,这样页面会自动跳转到目标地址。
第二种方法:本质上Discuz就是通过script标签的跨域性来请求目标接口实现传递登录状态,可以在后端截取该url,返回给前端,由前端处理。
登录script执行成功后,Discuz仍然没有登录状态?
因为通过同步注册接口进行注册的用户没有激活,所以需要手动在Discuz登录一次激活,同步登录才会生效。Discuz登录后自动激活设置
![](http://8cd03f74.wiz03.com/share/resources/ca1113fe-894f-47c4-a02f-d672a1f1b20f/index_files/ad3306d5-49bf-423d-b8a1-63ba8866f109.png)
这样设置后,只是在Discuz登录的时候不需要手动输入验证码来激活,但上面的问题还没有解决。
同步注册后自动激活
//打开discuz/api/uc.php //synlogin方法(180行)处,往下找到 if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } //改为 if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } else { if(!function_exists('uc_get_user')) { loaducenter(); } $user = uc_get_user($uid, 1); if($user) { $time = time(); DB::query("REPLACE INTO ".DB::table('common_member')." SET `uid`='{$user[0]}' , `username`='{$user[1]}' , `password`='".md5(random(10))."' , `email`='{$user[2]}' , `adminid`='0' , `groupid`='10' , `regdate`='{$time}' , `emailstatus`='0' , `credits`='0' , `timeoffset`='9999'"); DB::query("REPLACE INTO ".DB::table('common_member_status')." SET `uid`='{$user[0]}' , `regip`='{$_G['clientip']}' , `lastip`='{$_G['clientip']}' , `lastvisit`='{$time}' , `lastactivity`='' , `lastpost`='0' , `lastsendmail`='0'"); DB::query("REPLACE INTO ".DB::table('common_member_count')." SET `uid`='{$user[0]}' , `extcredits1`='0' , `extcredits2`='0' , `extcredits3`='0' , `extcredits4`='0' , `extcredits5`='0' , `extcredits6`='0' , `extcredits7`='0' , `extcredits8`='0'"); DB::query("REPLACE INTO ".DB::table('common_member_profile')." SET `uid`='{$user[0]}'"); DB::query("REPLACE INTO ".DB::table('common_member_field_forum')." SET `uid`='{$user[0]}'"); DB::query("REPLACE INTO ".DB::table('common_member_field_home')." SET `uid`='{$user[0]}'"); DB::query("UPDATE ".DB::table('common_stat')." SET `register`=`register`+1 WHERE `daytime` = '".date('Ymd', $time)."'"); if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } } }
修改完后,同步注册后就会直接激活了,现在调用同步登录后就能直接同步登录状态了。
参考连接:http://blog.csdn.net/dongsg11200/article/details/24609783
同步注册后自动激活(第二种方法)
多程序整合 UCenter,在新用户首次注册后是没有同步登录到其它程序的,也就是说用户得在其它程序用密码再登录一次,以后才能同步登录,还有就是用户不是在 Discuz 程序注册的话,在 Discuz 登录时得手动激活,这些都导致用户体验很不好,不过解决方法很简单~修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码
如 Discuz X 的:多程序整合 UCenter,在新用户首次注册后是没有同步登录到其它程序的,也就是说用户得在其它程序用密码再登录一次,以后才能同步登录,还有就是用户不是在 Discuz 程序注册的话,在 Discuz 登录时得手动激活,这些都导致用户体验很不好,不过解决方法很简单~
修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码
如 Discuz X 的:
Discuz 的参数比较多,
dbname是数据库名,.pre_ 是表前缀,按自己的情况修改
$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'");
我的是Discuz3.4,按照这种方法修改后并没有效果,可能是版本不同?。
参考连接:http://blog.csdn.net/iastro/article/details/52587643
参考连接2:https://www.cnblogs.com/seaning/p/3993068.html
相关文章推荐
- ucenter及discuz整合,双向同步注册及登录注意事项2016年9月13
- ucenter及discuz整合,双向同步注册及登录注意事项2016年9月13
- java(jsp)整合discuz同步登录功能详解
- java(jsp)整合discuz同步登录功能详解
- java整合discuz小结(实现与论坛同步登录等操作)
- java(jsp)整合discuz同步登录功能详解
- java整合discuz论坛同步注册同步登录小结
- java整合discuz小结(实现与论坛同步登录等操作)
- Discuz X3整合ECShop同步登录登出问题解决方案
- 整合Ecshop与Discuz通讯成功,同步登录、退出不一致
- hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
- hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
- hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常 - lihui_yy
- dedecms v5.7 整合discuz x3.2 双向同步登录退出
- Java通过UCenter实现Discuz同步登录
- Asp.Net站点整合Discuz论坛实现同步注册和单点登录
- dedecms v5.7 整合discuz x3.2 双向同步登录退出(2016年4月2号)
- ecshop 和 discuz 整合后,通信成功,但是不能同步登录的解决办法!
- discuz论坛整合ucenter免激活,同步登录,同步退出解决方案(附源码)
- discuz论坛整合ucenter免激活,同步登录,同步退出解决方案