UCenter在JAVA项目中实现的单点登录应用实例

简介: Comsenz(康盛)的UCenter当前在国内的单点登录领域占据绝对份额,其完整的产品线令UCenter成为了账号集成方面事实上的标准。 基于UCenter,可以将Comsenz旗下的Discuz!(社区论坛系统)、SupeSite(门户CMS系统)、X-Space(博客系统)从用户资源层面进行无缝整合,使得账号实现统一管理,在任何一个系统中进行注册、登录、注销等操作时,该账号在其他系统中的会话状态也将同步更新,最终实现一号通的单点登录模式。

Comsenz(康盛)的UCenter当前在国内的单点登录领域占据绝对份额,其完整的产品线令UCenter成为了账号集成方面事实上的标准。

基于UCenter,可以将Comsenz旗下的Discuz!(社区论坛系统)、SupeSite(门户CMS系统)、X-Space(博客系统)从用户资源层面进行无缝整合,使得账号实现统一管理,在任何一个系统中进行注册、登录、注销等操作时,该账号在其他系统中的会话状态也将同步更新,最终实现一号通的单点登录模式。

UCenter具备良好的扩展性,除了完美兼容自家的各种系统外,还支持其他项目的集成。

我现在准备做的,就是要在一个JAVA项目中,将会员账号部分与UCenter保持同步,以便将来可以顺利的嵌入Discuz!社区论坛系统。

幸好,已经有人为我们写好了一个面向JAVA的UCenter接口方案,其项目地址为:http://code.google.com/p/discuz-ucenter-api-for-java

我本次也是基于这个名叫discuz-ucenter-api-for-java的API来实现,感谢作者ping.china


 

一、准备工作

1、下载UCenter:http://www.comsenz.com/downloads/install/ucenter

2、将UCenter部署到支持PHP脚本的服务器上,然后按照向导进行安装即可。

3、访问UCenter控制台,添加新应用,其中:

安装方式:自定义

应用类型:其他

应用名称:JAVA项目名称,可随意

应用主URL:JAVA项目的访问地址,例如:http://localhost:8080/javaTest

通信密钥:任意字符,例如:123456

应用接口文件名称:uc.php,这个不要改,前面也不要加/api/,UCenter在与其通信时会自动转换为:http://localhost:8080/javaTest/api/uc.php

是否开启同步登录:是

是否接受通知:是

以上的配置项必填,其他保持为空即可

点击“提交”,保存成功后,记下该JAVA应用的APPID,下面的配置中会需要。

此时返回应用列表,UCenter会自动进行通信验证,不出意外肯定会出现“通信失败”的字样,先不必管它

二、JAVA项目配置

1、从“discuz-ucenter-api-for-java”的开源项目网站中下载相关的API文件,也可以从这里下载:JAVA_UCenter.zip

2、将JAVA_UCenter.zip解压、覆盖到你的JAVA项目中,其中的新文件有:

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

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

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

 

注意:

(1) src/config.properties中的代码如下:

# ================================================
# Ucenter API for JAVA
# ================================================
UC_API = http://localhost:9201
UC_IP =
UC_KEY = 123456
UC_APPID = 2
UC_CONNECT =

其中,UC_API表示UCenter的访问地址,UC_KEY就是在UCenter中添加新应用时定义的通信密钥,UC_APPID表示新应用的APPID,就是刚才记下的那个。

除这三项外,其他的配置保持为空即可。

(2) WebRoot/WEB-INF/web.xml中的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
  <servlet>
    <display-name>同步UC Server发出的操作指令</display-name>
    <servlet-name>UC</servlet-name>
    <servlet-class>api.ucenter.UC</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>UC</servlet-name>
    <url-pattern>/api/uc.php</url-pattern>
  </servlet-mapping>
 
</web-app>

别的无所谓,只需注意这一行:<url-pattern>/api/uc.php</url-pattern>

3、JAVA端配置完成,在eclipse中启动调试模式

4、再次返回到UCenter的控制台,点击应用管理,此时应该会看到绿色的“通信成功”字样

三、在JAVA项目中如何具体与UCenter进行通信

做到这里,JAVA项目与UCenter的基本集成工作已经圆满完成。

至于在JAVA中如何使用Client对象与UCenter进行同步通信,就很简单了, 具体可以到discuz-ucenter-api-for-java的开源项目中查看

四、让JAVA项目与Discuz!进行会话状态同步

1、在JAVA项目中登录、退出,同步到Discuz!

在JAVA项目中,用户登录成功之后,需要执行以下代码:

        Client uc = new Client();
        String ucsynlogin=uc.ucusersynlogin(uid);
        out.println($ucsynlogin);

其中的$ucsynlogin其实是一段JavaScript代码,这段代码是从UCenter返回的

目的就是向已经在UCenter中注册的应用发送状态同步请求,保持会话状态一致性

所以,就要保证$ucsynlogin中的JS代码必须输出到浏览器,并且成功执行

2、在Discuz!中登录、退出,同步到JAVA项目

首先,要注意一个配置选项,位于Discuz!管理控制台的:站长 - UCenter设置中

UCenter 连接方式:必须选择“接口方式”,如果选择“数据库方式”,则不会向其他应用发送同步请求

然后,在我们JAVA项目中,作为与UCenter对话的窗口,src/api/ucenter/UC.java就会负责接收其他应用通过UCenter发送过来的会话状态同步请求

其中的$action.equals("synlogin")为登录同步,修改其中对Cookie的赋值代码,实现本地系统的会话也保持登录状态

其中的$action.equals("synlogout")为登出同步,同样,修改代码,实现本地的登出同步。

注意其中的一行代码:

response.addHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");

意思是要求浏览器对当前的Cookie操作宽容对待,如果涉及跨域操作也不要阻止。所以,这行代码原样保留,可以使状态同步更加稳定。

五、已知问题

貌似使用中文注册的账号,在同步时可能会因为Base64解码不一致的原因发生问题,具体我还没有测试,等到发生时再详细记载。

 


宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒
目录
打赏
0
0
0
0
8
分享
相关文章
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
733 23
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
237 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
【Java进阶】JavaScript电灯开关实例:从理论到实践
这个例子展示了JavaScript的基本功能,包括操作HTML元素,监听事件,以及改变元素的样式。通过学习和理解这个例子,你可以了解到JavaScript在网页中的应用,以及如何使用JavaScript来创建交互式的网页。
30 13
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
100 23
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
197 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
133 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
136 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
115 4
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
132 7
CRaC技术助力ACS上的Java应用启动加速
容器计算服务借助ACS的柔性算力特性并搭配CRaC技术极致地提升Java类应用的启动速度。
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等