discuz-ucenter-api-for-java
最完美的Discuz UCenter的JAVA API接口,简单易用,完全免费!
说明
由于原有项目已经非常古老了,看时间应该是2009年的产物,但现在的项目都使用Maven和SpringBoot进行构建,里面直接配置servlet的方式不太适合现代项目集成,我就拿来进行了一些修改,让使用Maven和SpringBoot的程序更容易集成进去。
关于 GPL-2.0 License
GPLv2具有很强的传染性,选用这个开源协议并不是我定的,而是原项目作者在开源时就选用了 GPLv2,我也只能跟随原开源协议继续传染下去。
当然,如果您并不注重什么版权协议,那可以无视。
关于程序包名修改
也许您注意到源程序的程序包名由com.fivestars被我改为了net.renfei.discuz.ucenter,这是因为要发布到Maven中央仓库,在注册Maven中央仓库的时候会要求验证域名所有权,并且数字签名,所以我只能发布net.renfei的库,为了在项目中不产生混淆,我就直接将源码中的包名也一起统一修改了。
必要条件
您的项目环境需要是JDK1.8以上。其中Base64使用了Java8自带的库实现,移除了原作者自己写的Base64算法。同时我的编译环境也是在Java8中编译发布的。
安装
我使用的是Maven和SpringBoot进行演示。在pom.xml文件中添加依赖:
net.renfei
discuz-ucenter-api-for-java
1.0.3
使用
为了跟SpringBoot更好的集成,我对原项目进行了修改,原项目是修改配置文件,我修改为了实例化时传递参数的方式
实例化
实例化一个客户端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处理HttpServletRequest和HttpServletResponse的方式。
先创建一个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看到通讯正常了。具体使用如下案例:
@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 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);
}
更多信息