JAVA项目单点登录Discuz

一、需求分析

有个JAVA项目与一个Discuz论坛需要整合,使得它们之间能实现单点登录功能。可是Discuz是PHP写的,两者语言不通该如何整合呢?查阅官方资料发现,Discuz并未开放说有什么用户接口之类的。但却发现了这货UCenter,显然这货与Discuze是一家人。so,接下来的整合我们即将用到UCenter作为中间件来实现不通语言项目之间用户的共享。

二、关于UCenter

介绍方法之前,我觉得还是有必要先说说UCenter,理解了它的工作原理是很有必要的。

UCenter 的中文意思就是“用户中心”,其中的 U 代表 User,也代表 You,取其中的含义就是“用户中心”,或者说“你(最终用户)的中心”。UCenter 是今后 Comsenz 旗下各个产品之间信息直接传递的一个桥梁。通过 UCenter,站长可以无缝整合 Comsenz 系列产品,甚至更多的第三方应用,实现用户的一站式登录和个人信息、积分等资料的统一管理。

以上是官方介绍,说白了,它就是座桥梁。例如A应用中用户登录了,通知UCenter,然后UCenter再把这消息通知给B啊C啊等等其它的应用,从而实现了单点登录。说的太累,那就请看下方这幅图(转至网络):

恩,大概流程是这样子的。用户登录了,发送通知给UCenter Service。然后UCenter再推送消息给别的应用,应用接受消息设置cookie等,实现了同步登录、登出。

三、方法步骤

1、设置UCenter:

在装完Discuz时,我们一般都会勾选同步安装UCenter,那么你就可以从Discuz后台,登录到UCenter后台去进行设置,如图:

或者你输入http://localhost(或ip)/uc_server 也可以跳转到登录页面。选择管理员身份登录,账户密码就是Discuz管理后台的管理员账户密码。

但是,这儿会出现个小BUG。Discuz升级到3.x版本后,这儿登录却毫无反应。官方社区已经提供了解决的办法,其实很简单,只要修改admin.php文件就可以了。而文件则在你项目的uc_server/model/admin.php 如图:

打开文件后如下图红色框内的信息:

恩,修改好后,保存退出重新登录就OK了。

2、UCenter后台应用设置

在应用管理中可以看到ID为1的Discuz应用,此时你该做的就是添加你想要在这平台上整合的其它应用。

如图填写咯,都有些注释,如果你还是不清楚的话,请戳这儿:http://faq.comsenz.com/library/UCenteruse/useuse/useuse_addapp.htm 官方教程。

添加好后,你会看到应用管理中如下图:

多了个应用,请牢牢记住这个新应用的ID和之前添加时填写的通信秘钥,到时候会用的上的。而在右方显示通信失败时正常的,莫慌,因为你的另一个应用还没启动,还没配置好啊!

3、新应用中的文件配置

这个新应用呢,就是要整合的JAVA项目咯。首先,请看这儿:http://faq.comsenz.com/library/UCenter/introduction/introduction_interface.htm 这是Discuz社区开放的UCenter开发接口,遗憾的是它的例子同样也是php写的。但早已经有人根据接口写了个java版的接口了,叫做:discuz-ucenter_api_for_java 。本文的例子也是通过它实现的,Demo结构图如下。

好的,我们先来修改下最为重要的配置文件:config.properties(Demo项目中是这个配置文件,具体要依据你如何整合到自己项目中做修改变更,例如我整合到我自己的项目中后就是application.properties文件)

UC_API是你discuz项目中UCenter的接受信息地址(不一定要ip地址,可以使你的域名地址),这个地址下会有个uc.php文件接收处理信息。

UC_IP是为了防止你项目域名解析不正确,而写实际的IP地址。

UC_KEY是添加在UCenter后台管理中添加新应用时该应用的通信密钥。

UC_APPID是应用的ID哦~之前有提醒过哦。

当然,还有个配置得做,那就是你得web.xml文件:

都配置好后,我们就开始测试咯。等等,还得说下,UC.java这个其实是处理UCenter发送来的信息。而PHPFuctions.java则是应用发送请求给UCenter的处理类。Demo里大家可以去分析看看。

4、测试结果

运行Jsp_demo.jsp文件哦,记得你的先注册个号通知UCenter,这儿有个疑惑:当你注册完后,UCenter数据库里是有新用户,然而它并未通知给discuz,discuz中却无新用户数据,所以第一次注册并未能同步到用户,得需要新用户到discuz登录过一次后,才能把用户数据相互同步。

当你登录成功,会发现收到段返回的JS代码:

没错,这段js代码则是再一次发送请求给UCenter跟他说,哥们,我已经正确登录了,修改了cookie那些,麻烦你跟其它家伙说下,让它们也跟我同步呗。所以说这段JS代码很重要。如果它返回错误或请求通信失败等,也就都无法实现应用同步了。

5、本文的Demo已经把原接口做了些转码修改,完美的解决了中文注册、登录等问题。

三、结语

马上就过年了,这是今年的最后一篇博文,写的略显仓促。提前祝福大家,新年快乐!在新的一年,朝着大牛路一步一个脚印。还是当初那句话:分享是种快乐,坚持是种精神。

由于文章附件只能上传2M以内,我吧demo传到了百度网盘:http://pan.baidu.com/s/1CUfhk

时间: 2024-10-17 19:43:16

JAVA项目单点登录Discuz的相关文章

JAVA CAS单点登录之三:CAS代理模式演练

前言 JAVA CAS单点登录之一:搭建CAS服务器 JAVA CAS单点登录之二:CAS普通模式1演练 代理模式相相对上一节的普通模式,更加复杂了.但配置起来也会稍微有些差别.所谓难者不会,会者不难.如果遇到一个从来没有遇到的问题,解决起来也是非常棘手的,当然解决之后就不是事了.我就遇到了一个CAS 坑爹的错误.一步步按照别人的博客坐下来,普通模式部署没有多大问题,就是不知道为什么代理模式总是出错,搜遍了整个网络,也没找到问题所在,我就纳闷了,为什么就没有人 遇到过呢.还好,最后我使用了杀手锏

JAVA CAS单点登录(SSO) 教程

一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server),官网:http://www.jasig.org/cas 本教程环境: Tomcat6.0.29 JDK6 CAS Server版本:cas-server-3.4.3.1 CAS Client版本:cas-client-3.1.12 教程撰写日期:2010-11-

java UCnter 单点登录 对接。

前提 PHP项目要部署成功.论坛能正常访问. 先配置 应用 1.是论坛应用 4.是java服务器,也就是你java登录的项目. 必须通信成功. .主应用IP就是你java项目的入口. 例如:http://192.168.1.100:8080 注意不要写成 http://192.168.1.100:8080/ 后面不要加斜杠. 进 bbs/admin.php 设置好,激活方式. 论坛的配置完了.再配置java项目. java 项目 resourse 也就是类路径下面.会有一个config.prop

【Java】单点登录(SSO)

单点登录介绍 ? SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一. 实现机制 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录:根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--token:用户再访问别的应用的时候就会将这个to

java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

果学网-专注IT在线www.prismcollege.com 1,按照下面各大链接的教程,把Base64,Client,PHPFunctions,UC,XMLHelper加入web程序. 2,修改web.xml,加入 <servlet> <display-name>同步UC Server发出的操作指令</display-name> <servlet-name>UC</servlet-name> <servlet-class>com.e

阿里Java研发三面:说一下你项目中的单点登录是如何实现的?

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系. 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就

java单点登录系统CAS的简单使用

转:http://blog.csdn.net/yunye114105/article/details/7997041 背景 有几个相对独立的java的web应用系统, 各自有自己的登陆验证功能,用户在使用不同的系统的时候,需要登陆不同的系统.现在需要提供一个统一的登陆/登出界面, 而不修改各个系统原来的登陆验证机制.于是采用单点登录系统CAS. 使用步骤 要使用单点登录,需要部署CAS系统, CAS服务端可以直接部署在tomcat下运行, 对于CAS服务端来说,所有要集成单点登录的web应用都是

(十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

(十一)Java B2B2C o2o多用户商城-SSO单点登录之OAuth2.0登录流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的登录认证): ? ?上面的图很清楚的描述了当前登录login的流程,现在我们针对于login做成相关的微服务,解析如下: 请求方式:POST服务URL:?http://localhost:8080/user/login参数类型:application/json Headers: Content-Ty