# discuz-ucenter-api-for-java
**Repository Path**: bitters/discuz-ucenter-api-for-java
## Basic Information
- **Project Name**: discuz-ucenter-api-for-java
- **Description**: Discuz3.2与Java 项目整合单点登陆,discuz 和 JAVA 对接需要一个中间件,它就是 Ucenter。Comsenz(康盛)的 UCenter 当前在国内的单点登录领域占据绝对份额,其完整的产品线令 UCenter 成为了账号集成方面事实上的标准。基于 UCenter,可以将 Comsenz 旗下的 Discuz!(社区论坛系统)、SupeSite(门户CMS系统)、X-Space(博客系统)从用户资源层面进行无缝整合,使得账号实现统一管理,在任何一个系统中进行注册、登录、注销等操作时,该账号在其他系统中的会话状态也将同步更新,最终实现一号通的单点登录模式。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 2
- **Created**: 2019-01-22
- **Last Updated**: 2023-07-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# discuz-ucenter-api-for-java
#### 介绍
Discuz3.2与Java 项目整合单点登陆,discuz 和 JAVA 对接需要一个中间件,它就是 Ucenter。Comsenz(康盛)的 UCenter 当前在国内的单点登录领域占据绝对份额,其完整的产品线令 UCenter 成为了账号集成方面事实上的标准。基于 UCenter,可以将 Comsenz 旗下的 Discuz!(社区论坛系统)、SupeSite(门户CMS系统)、X-Space(博客系统)从用户资源层面进行无缝整合,使得账号实现统一管理,在任何一个系统中进行注册、登录、注销等操作时,该账号在其他系统中的会话状态也将同步更新,最终实现一号通的单点登录模式。
#### 软件架构
软件架构说明
#### 安装教程
1. UCenter配置
2. 运行WEB程序
3. 集成测试
#### 使用说明
1. UCenter配置。略
2. 源代码说明
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
3. 配置web.xml
api
com.discuz.interfaces.bbs.api.UC
2
api
/api/uc.php
4. 整个配置就完成了,启动 Web 服务器后,打开 UCenter 控制台可以看到应用已经通讯成功了
5. 登陆代码
String tipStr = "";
if (!"".equals(user.getUserName())) {
// 获取Ucenter的登陆结果,同步其他应用的登陆状态
Client uc = new Client();
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(new UserDAOImpl().checkUser(user.getUserName()))) {
ctx.put("uclogin", $ucsynlogin);
ctx.getSession().put("user", user);
return SUCCESS;
}
}else if( $uid == -1) {
tipStr = "用户不存在,或者被删除!";
}else if( $uid == -2) {
tipStr = "密码错误!";
}else {
tipStr = "未定义!";
}
}
}
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request