discuz java版_Discuz3.2与Java 项目整合单点登陆

整合部分

首先,当然是进行项目整合。

开始这一部分的前提是你的论坛已经启动并且安装好UCenter。

据了解 Discuz3.x 以下的版本是不带 UCenter 的,之前的就不去探讨了,如果没有的话另外安装就行。这边3.2版的论坛已经集成好了。

1、使用 admin 登陆论坛的 UCenter 控制中心,这个地方就是用 admin 登陆后进入到管理中心就可以看到菜单如下。

0605c272985576ca379ca2a9dbf32d3b.png

2、进入UCenter 后,点击左边菜单“应用管理”,右边会默认出现一条信息,这是当前的论坛,UCenter 默认将论坛纳入到了统一管理,这个时候就要进行我们的新应用(JAVA WEB)的添加,理论上是可集成任何项目,这也是康盛开发这个统一用户管理中心的目的,废话不多说下面开始配置我们的项目吧。

3、点击当前页面上的“添加新应用”,进行WEB项目配置如下图。

81823540348bf269ac159c4ada079755.png0bbc53485512039577e45c9e832acfb9.png

ID:这个记住,配置WEB项目时需要。

应用类型:这个可以根据自己的项目选,如果不在里面的选项选“其他”,这个应该对集成影响不大,猜想应该是UCenter对存在的这几种类型的应用有更好的优化支持。

应用名称:这个就随意了,写项目名称可以,别的也行,只是为了自己能区分。

应用的主URL:填自己的 JAVA_WEB 项目主访问路径,结尾带不带“/”貌似并不像它提示的那样有影响。我这边是都可以的,不过为了避免集成过程中出现未知问题,先按这个来配,路径结尾不带“/”,成功后你可以测试下路径带“/”。

通信密钥:这个任意字符,但一定要和JAVA_WEB里面的配置文件一致。后面WEB配置会提到。

应用接口文件名称:uc.php ,这个是默认的,如果改了请恢复,UCenter在与其通信时会自动转换为 /api/uc.php 的格式

是否开启同步登陆:是

是否接受通知:是

这样整个应用添加就完成了,直接提交返回到“应用管理”的主页面看,会发现多了一条信息,这个就是你配置的应用了。

b9a5510efb5d18f3b0328503a9d94c42.png

好的,相信聪明的你已经发现问题了,一个大红X通信失败,不用担心,因为我们的Web端还需要一些配置。

4、进行Java Web端的配置

a. 我们需要discuz java api的支持,里面包含 jar 和源码,下载地址:http://code.google.com/p/discuz-ucenter-api-for-java,当然很多朋友估计是打不开这个网站的,如果没办法下载,有需要可以联系我

b. 将下载的架包放到自己的项目中,也可以将源码直接放到项目里。结构如下

4f592ae18aa0484c9cc2d80cc09ad68f.png

src/api/ucenter/Base64.java

src/api/ucenter/Client.java: 将常用的 UCenter 操作封装成的客户端对象,我们在项目中主要用它来与 UCenter 打交道

src/api/ucenter/PHPFunctions.java

src/api/ucenter/UC.java: 本地的 JAVA 项目用来接收 UCenter 同步命令的 Servlet接口,其访问地址必须为: /api/uc.php

src/api/ucenter/XMLHelper.java

src/config.properties:本地的JAVA项目与UCenter的接口配置文件( 需要根据实际环境进行配置 )

WebRoot/WEB-INF/web.xml: 主要就是将 src/api/ucenter/UC.java 定义为 Servlet

5、进行config.properties配置

#

#================================================# * Discuz! Ucenter API for JAVA

#================================================# UC comunication settings

#

#

#uc server url

UC_API= http://10.10.10.14/upload/uc_server#uc ip address 可留空

UC_IP= 10.10.10.14#key

UC_KEY= 123456789#appid 这里对应的就是你在 UCenter 新添加应用的时候ID

UC_APPID= 2#connect mode: default value is""UC_CONNECT=

6、进行 web.xml 配置,添加下面这段。

api

com.discuz.interfaces.bbs.api.UC

2

api

/api/uc.php

7、整个配置就完成了,启动 Web 服务器后,打开 UCenter 控制台可以看到应用已经通讯成功了。

8、下面就是代码整个注册、登陆、退出了。我主要是想由 UCenter 来统一管理用户,所以用户标准以 UCenter 为准,下面是我测试写的 demo,各位仅作参考

a. 注册

publicString execute() {

ActionContext ctx=ActionContext.getContext();

String tipStr="";

Client uClient= newClient();

String $returns=uClient.uc_user_register(user.getUserName(), user.getPassword(), user.getEmail());int $uid =Integer.parseInt($returns);if ($uid <= 0) {if ($uid == -1) {

tipStr= "用户名不合法!!";

}else if ($uid == -2) {

tipStr= "包含要允许注册的词语!!";

}else if ($uid == -3) {

tipStr= "用户名已经存在!!";

}else if ($uid == -4) {

tipStr= "Email 格式有误!!";

}else if ($uid == -5) {

tipStr= "Email 不允许注册!!";

}else if ($uid == -6) {

tipStr= "该 Email 已经被注册!!";

}else{

tipStr= "未定义!!!";

}

}else{

System.out.println("OK:" +$returns);if(newUserDAOImpl().addUser(user)){returnSUCCESS;

}else{

tipStr= "平台数据库插入失败!";

}

}

ctx.put("tip", tipStr);returnERROR;

}

b. 登陆

publicString execute() {

ActionContext ctx=ActionContext.getContext();

String tipStr= "";if (!"".equals(user.getUserName())) {//获取Ucenter的登陆结果,同步其他应用的登陆状态

Client uc = newClient();

String result=uc.uc_user_login(user.getUserName(), user.getPassword());

LinkedList 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("Ucenter登陆成功: " + $username + " " + $password + " " +$email);

String $ucsynlogin=uc.uc_user_synlogin($uid);

System.out.println("Ucenter登陆成功: " +$ucsynlogin);//进行自己系统的登陆权限判断

if (user.getPassword().equals(newUserDAOImpl().checkUser(user.getUserName()))) {

ctx.put("uclogin", $ucsynlogin);

ctx.getSession().put("user", user);returnSUCCESS;

}

}else if( $uid == -1) {

tipStr= "用户不存在,或者被删除!";

}else if( $uid == -2) {

tipStr= "密码错误!";

}else{

tipStr= "未定义!";

}

ctx.put("tip", tipStr);returnERROR;

}

ctx.put("tip", result);

}returnERROR;

}

上面标黄部分 $ucsynlogin ,需要把它存到session中,然后在登陆成功的主页面上调用一下,一定要!其原理就是相当于让浏览器去访问下自己应用与另外一个应用,分别同步下双方的cookie等操作。它的值如下:

页面上直接取到这个值就行了。

高大上的店

${uclogin}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值