Skip to content

renfei/discuz-ucenter-api-for-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

discuz-ucenter-api-for-java

Latest Stable VersionFOSSA Status

最完美的Discuz UCenter的JAVA API接口,简单易用,完全免费!

相关博文:https://www.renfei.net/posts/1003429

社区论坛:https://bbs.renfei.net/forum-44-1.html

说明

此项目移植自https://code.google.com/archive/p/discuz-ucenter-api-for-java / https://github.com/liangping/dzclient4j,感谢原作者梁平 (no_ten@163.com)将他的代码开源。

由于原有项目已经非常古老了,看时间应该是2009年的产物,但现在的项目都使用MavenSpringBoot进行构建,里面直接配置servlet的方式不太适合现代项目集成,我就拿来进行了一些修改,让使用MavenSpringBoot的程序更容易集成进去。

关于 GPL-2.0 License

GPLv2具有很强的传染性,选用这个开源协议并不是我定的,而是原项目作者在开源时就选用了 GPLv2,我也只能跟随原开源协议继续传染下去。

当然,如果您并不注重什么版权协议,那可以无视。

FOSSA Status

关于程序包名修改

也许您注意到源程序的程序包名由com.fivestars被我改为了net.renfei.discuz.ucenter,这是因为要发布到Maven中央仓库,在注册Maven中央仓库的时候会要求验证域名所有权,并且数字签名,所以我只能发布net.renfei的库,为了在项目中不产生混淆,我就直接将源码中的包名也一起统一修改了。

必要条件

您的项目环境需要是JDK1.8以上。其中Base64使用了Java8自带的库实现,移除了原作者自己写的Base64算法。同时我的编译环境也是在Java8中编译发布的。

安装

我使用的是MavenSpringBoot进行演示。在pom.xml文件中添加依赖:

<dependency>
  <groupId>net.renfei</groupId>
  <artifactId>discuz-ucenter-api-for-java</artifactId>
  <version>1.0.7</version>
</dependency>

如果你使用的是传统方式,需要下载Jar包,放入lib文件夹,下载地址:discuz-ucenter-api-for-java-1.0.7.jar

使用

为了跟SpringBoot更好的集成,我对原项目进行了修改,原项目是修改配置文件,我修改为了实例化时传递参数的方式

Https(SSL) 站点

如果你的站点是https的,必须使用版本号1.0.6及以上,旧版本的作者没有考虑https,我修改了代码兼容了https

实例化

实例化一个客户端net.renfei.discuz.ucenter.client.Client,参数依次是:UCenter接口地址、IP地址、通讯Key、APPID、Connect。

Client client = new Client("http://localhost/uc_server", null, "key", "2","");

客户端

旧的源代码中是通过配置文件注册一个servlet,我改造的是用于SpringBoot项目的,所以通过配置文件注册servlet不是很方便,而且为了尽量降低代码入侵性,我就改为自己使用Controller处理HttpServletRequestHttpServletResponse的方式。

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

@Controller
public class UCenterController {

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

如果您想自己处理一些动作的逻辑,只需要继承net.renfei.discuz.ucenter.api.UCClient然后重写覆盖里面的doAnswer(Client client, HttpServletRequest request, HttpServletResponse response)方法即可。

注册

Client client = new Client("http://localhost/uc_server", null, "key", "2","");
String string = client.ucUserRegister("username","password","email");

登陆

Client client = new Client("http://localhost/uc_server", null, "key", "2","");
String string = client.ucUserLogin("username","password");

同步登陆

Client client = new Client("http://localhost/uc_server", null, "key", "2","");
int UID = 21; //此处是用户的UID
String string = client.ucUserSynlogin(uid);

先登陆再同步登陆

Client client = new Client("http://localhost/uc_server", null, "key", "2","");
// 登陆
String result = client.ucUserLogin(uid);
LinkedList<String> 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);
}

常见问题

在网友使用中出现问题,和我们一起讨论交流的结果将在 https://www.renfei.net/posts/1003429 文章末尾常见问题中更新补充。

代码仓库

更多信息

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

求鼓励

如果这个项目帮助到了你,是否能给我点个免费的星星 (Star) 给个鼓励呢。高星项目我将持续关注努力更新的。