条件准备
部署Discuz
参见文章:windows下discuz论坛
Linux下原理相同Java项目
普通Javaweb项目即可
Discuz用户中心访问程序包
云盘地址
链接:https://pan.baidu.com/s/1dFtW97z 密码:mkay下载解压,将里面的
com.fivestars.interfaces.bbs包
和 config.properties
和 Jsp_demo.jsp
和 web.xml
拷贝出来 备用。
Java项目与Discuz整合单点登录
将配置和工具类放到Java项目
清单
1.discuz工具包 2.web.xml添加discuz工具包路径 3.discuz配置文件 4.修改Java项目登录代码 5.discuz jsp将工具包放到Java项目中:
com.fivestars.interfaces.bbs包(src根目录) 和 config.properties(src根目录) 分别放到对应目录(参考下载的Demo目录结构)将web.xml中的复制到Java项目的web.xml中,内容如下:
<servlet> <servlet-name>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>api</servlet-name> <url-pattern>/api/uc.php</url-pattern> </servlet-mapping>
Discuz的UCenter中配置参数,使其与Java项目通信
访问Discuz的用户管理中心(我的discuz在apache下部署的名称为bbs,部署机器ip为192.148.1.147),如:
http://192.168.1.147/bbs/uc_server以创始人或管理员身份登录

点击应用管理,添加新应用
1.应用类型 选择:其他 2.应用名称 随便写,最好和Java项目名保持一致 3.应用的主URL Java项目的访问地址,如: http://localhost:8080/discuzTest 4.通信密钥 随便写,如123456,后面在Java项目中要用到 5.是否开启同步登陆 勾选:是 6.是够接受通知 勾选:是 最后提交,提交后在应用管理用看到,此时应用通信还处于失败状态,接下来配置Java项目

修改Java项目中的config.properties
修改前面复制到Java src跟目录下的config.properties内容,内容如下(根据实际情况配置):
#UCenter访问地址 UC_API = http://192.168.1.147/bbs/uc_server #uc ip address,UCenter ip地址 UC_IP = 192.168.1.147 #key,通信密钥 UC_KEY = 123456 #appid,应用ID(在应用管理>应用列表中可以看到) UC_APPID = 4 #connect mode: default value is "",可以不填 UC_CONNECT = 启动Java项目,进入UCenter>应用管理,可以看到此时的通信情况会变为:通信成功。
单点登录开发
Java项目中访问Discuz,
假定点击一个按钮跳转到一个loginDiscuz.jsp页面,提供Discuz论坛地址,点击地址后跳转到论坛首页:将上面Jsp_demo.jsp中的代码拷贝到loginDiscuz.jsp中,稍加修改:
注:其中下面的代码比较重要
out.println($ucsynlogin + "<a href='http://localhost/bbs' target='_blank'><span style='font-size:18px'>点此访问论坛!</span></a>"); 将返回的$ucsynlogin输出到页面,才能是单点登录成功。 如何用postman访问整合好的Java项目,如: http://192.168.1.147:8080/discuzTest/Jsp_demo.jsp 会看到返回一段js: <script type="text/javascript" src="http://localhost/bbs/api/uc.php?time=1514532782&code=2f15Z57hlywzRB9IwfMmFH%2BVicj4NZLJyxbcdwiTFsOfI1mv2SPKISVXNEkTEmtP9AdwcNfJJPB9z9F36U4T%2FGvSm%2BHvR4%2BefOyk6x4k1zS0KmP%2BZKXM9i6Pj%2BizV06jNyT7kLnYVyPChoOwEMeoqomqIKYbnBaI5pN3" reload="1"></script> 将js中的src中的内容复制粘贴到浏览器地址栏访问,如果不报错, 再访问Discuz地址,可以看到不用输入登录信息,用户已经处于登录状态。关于上面返回值中的URL中的localhost
上面返回的链接中是src=”http://localhost/bbs。。。
如果想要返回discuz所在服务器ip,如src=”http://local192.168.1.147/host/bbs。。。。
需要在UCenter的应用管理中将Discuz的 应用的主URL 由http://localhost/bbs替换为所对应的ip,如: http://192.168.1.147/bbs如图:

bug修改
UCenter可能无法登陆bug修正
在discuz\uc_server\model\admin.php 找到adminbase函数,将 $this->cookie_status = 0; 修改为: $this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;单点登录后关闭浏览器用户没有注销bug修正(十分不安全)
在discuz\source\function\function_core.php找到dsetcookie函数,将
$path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath'];修改为:
//将cookie的生命周期改为浏览器会话结束时结束 $cookie_life = -1; $life = $life > 0 ? $cookie_life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0);
参考文章
bug修改
单点登录
discuz全部文件
云盘地址
链接:https://pan.baidu.com/s/1pLSilC3 密码:tned
包含文件列表
1-discuzTest.rar 2-修改后的logindiscuz.jsp 3-修改后的config.properties 4-修改后的Discuz部署的文件 5-官网下载的Discuz原包 6-Windows下的xamp(PHP集成环境)