discuz修改用户uid_Java Spring Boot 项目与 PHP 的 Discuz! 论坛同步登录登出 会员打通...

a34645adf0d117c6d63eb165448cc224.png

我的主站 Spring Boot 与 Discuz! 论坛进行了打通,实现了同步的登录登出,并可以将 Discuz! 论坛中会员的数据回显到我的主站中,并且我对之前开源的 discuz-ucenter-api-for-java 进行了部分修改,以适应当下 Spring Boot 的风格。

首先鸣谢开源

与 Discuz! 打通一般分为通过 API 通讯和数据库通讯,这次介绍的是通过 API 通讯,这就不得不提一下 discuz-ucenter-api-for-java,首先要感谢原作者:梁平 (no_ten@163.com)将他的代码开源,这让我们节省了很多时间。

重新修改开源代码

在我下载源码后我发现这个还是2009年的代码,满满的复古风,而且原作者是根据PHP的代码翻译过去的,所以里面很多习惯并不是Java的习惯,关键还要配置 servlet,也不支持Maven构建。这在现在的 Spring Boot 项目中是格格不入,所以我对源码进行了修改并二次发布。

为了适应 Maven 构建的 Spring Boot 风格,项目地址:https://github.com/renfei/discuz-ucenter-api-for-java,我做了以下修改:

  • 将项目包发布到 Maven 中央仓库

  • 基于现在Java的JDK8,移除了原作者的Base64实现,使用JDK8提供的java.util.Base64,所以最低需要JDK8来运行。

  • 将方法名下划线的风格改为驼峰命名风格,例如将「uc_user_delete()」改为「ucUserDelete()」。

  • 将PHP风格的变量名改为普通Java用的变量名,例如将「String $module」改为「String $module」。

  • 将使用配置文件的方式改为实例化时构造方法传参的方式

  • 将配置 servlet 改为自行定义 Controller 并处理 HttpServletRequest 和 HttpServletResponse

  • 部分中文乱码的问题进行了修复

Discuz的UCenter配置

在开始集成前,我们先要对Discuz的UCenter进行配置,拿到接口地址、通讯Key、APPID。先到Discuz的后台UCenter这里,新增一个应用:

1ec10d28d68b579500a4821c9643006a.png

然后填写配置,应用类型选择“其他”,再个应用起个名字,应用主的URL地址就填你的地址,通信秘钥自己随便设置个密码,最下方选择开启同步登录和接受通知:

c804f8c3cf5849191ac7fd98f7671e99.png

Spring Boot 集成 discuz-ucenter-api-for-java

我使用的是 Maven 构建的 Spring Boot 项目,所以需要先修改 pom.xml 将 discuz-ucenter-api-for-java 引入项目中:

<dependency>  <groupId>net.renfeigroupId>  <artifactId>discuz-ucenter-api-for-javaartifactId>  <version>1.0.2version>dependency>

然后我个人认为分为两大部分,一部分是作为客户端进行接收来自Discuz的UCenter的消息;一部分是主动向Discuz的UCenter发送消息,我们分开来说。

接收来自Discuz的UCenter的消息

先创建一个Controller,然后创建一个处理HttpServletRequest和HttpServletResponse的方法,给一个UCenter请求的地址@RequestMapping("/api/uc.php"),实例化一个客户端net.renfei.discuz.ucenter.api.UCClient和net.renfei.discuz.ucenter.client.Client,然后把HttpServletRequest交给net.renfei.discuz.ucenter.api.UCClient.doAnswer()去处理,最后将结果写入HttpServletResponse,如果UCenter配置正确,就应该可以在UCenter看到通讯正常了。具体使用如下案例:

@Controllerpublic class UCenterController {    @ResponseBody    @RequestMapping("/uc_server/api/uc.php")    public void uc(HttpServletRequest request, HttpServletResponse response) throws IOException {        UCClient ucClient = new UCClient();        Client client = new Client("http://localhost:8080/uc_server", null, "123456789", "3","");        String result = ucClient.doAnswer(client, request, response);        response.getWriter().print(result);    }}

主动向Discuz的UCenter发送消息

先登陆再同步登陆

Client client = new Client("http://localhost:8080/uc_server", null, "key", "2","");// 登陆String result = client.ucUserLogin(uid);LinkedList rs = XMLHelper.ucUnserialize(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) {        //同步登陆        String string = client.ucUserSynlogin(uid);        //本地登陆代码        //TODO ... ....    } else if(uid == -1) {        System.out.println("用户不存在,或者被删除");    } else if(uid == -2) {        System.out.println("密码错");    } else {        System.out.println("未定义");    }}else{    System.out.println("Login failed");    System.out.println(result);}

更多信息请阅读源代码,此处不再一一演示。您可以到Github提出issues或者到我的社区论坛一起讨论:https://bbs.renfei.net/forum-44-1.html

6d6d734c1a14563fe762ee0b6e7d62b8.png

长按关注 任霏博客微信 给你第一手的IT开发者资讯 24小时留言互动

点个“在看”

鼓励鼓励

↓↓↓

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值