Struts2 整合 Discuz 论坛 (1)

本文介绍如何将Discuz论坛系统与现有应用整合,包括用户登录、退出及注册流程。利用Passport API实现统一认证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为有一个 Struts2 网站发布,需要整合一个论坛来使用,公司的一个项目过去曾经整合过一个英文论坛,但似乎不能满足我们的需求,需要找一个成熟稳定的中文论坛,与我们的系统结合。

最终选择了 Discuz 作为我们的论坛系统,主要是因为它提供了一套可用的 Passport API,来直接与我们现有系统进行整合。

下面摘录 Discuz 文档中的内容来说明整合原理,随后的几篇中,将详细描述具体的整合过程。

假设已设置如下变量或参数

 

  • 挂接 Discuz! Passport 的应用程序假设为一套 PHP 语言编写的 CMS 系统
  • Discuz! 的 URL 为 http://www.myforums.com
  • 应用程序的 URL 为 http://www.mywebsite.com
  • 应用程序的注册页面为 http://www.mywebsite.com/register.php
  • 应用程序的登录页面为 http://www.mywebsite.com/login.php?action=login
  • 应用程序的退出页面为 http://www.mywebsite.com/login.php?action=logout

开启通行证后的用户登录流程

 

  • 如果用户在论坛点击“登录”,则转向到事先设置好的应用程序登录页面(http://www.mywebsite.com/login.php?action=login),并在登录页面的 URL 中加入参数 forward(加入 forward 后的链接例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在登录后将用户导向到指定的 URL。

  • 应用程序收到此请求后,按照惯例生成表单,并增加一个表单变量,将 GET 方式传递过来的 forward 参数通过表单进行传递。

  • 用户在应用程序的表单中填写登录信息,并提交到应用程序的登录验证程序。应用程序验证用户提交的用户名和密码的合法性:

    • 如果不通过:提示用户名密码错误,要求其返回上一页重新填写。

    • 如果通过,需要进行如下操作:

      • 设置自身 Cookie 或 Session,使得应用程序自身处于登录状态。

      • 检查表单中是否提交了 forward 变量,如有,则意味着登录请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛登录后能够跳转回到应用程序中。

      • 通过 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,将登录请求传递到论坛进行处理。其中 auth 用来将用户信息与资料以特定的格式,加密传递给论坛,forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证前面两个变量的有效性。auth、forward、verify 格式与结构将在后面进行说明。


  • Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:

    • 根据 verify 判断 auth 和 forward 变量是否合法,如合法则继续,否则终止。

    • 将 auth 根据既定算法解密,并还原成数组,数组的内容与格式将在后面进行说明。根据数组中的内容,检查此用户是否存在。如存在,则根据上述数组中的内容 UPDATE 论坛中相应的用户资料。如不存在,则使用数组中的信息 INSERT 到论坛用户资料表中。

    • 论坛设置 Cookie 或 Session,使得论坛自身处于登录状态。

    • 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL。


  • 至此,登录流程结束

开启通行证后的用户退出流程

 

  • 如果用户在论坛点击“退出”,则转向到事先设置好的应用程序退出页面(http://www.mywebsite.com/login.php?action=logout),并在登录页面的 URL 中加入参数 forward(例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在退出后将用户导向到指定的 URL。

  • 应用程序收到此请求后,清除自身 Cookie 或 Session,使得应用程序自身处于非登录状态。

  • 检查是否提交了 forward 变量,如有,则意味着登录请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛登录后能够跳转回到应用程序中

  • 通过 header('Location: http://www.myforums.com/api/passport.php?action=logout&forward=http://yyy&verify=zzz') 的方式,将退出请求传递到论坛进行处理。其中 forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证 forward 变量的有效性。forward、verify 格式与结构将在后面进行说明

  • Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:

    • 根据 verify 判断 forward 变量是否合法,如合法则继续,否则终止。

    • 清楚论坛的 Cookie 或 Session,使得论坛自身处于非登录状态。

    • 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL。


  • 至此,退出流程结束。

开启通行证后的用户注册流程

 

  • 如果用户在论坛点击“注册”,则转向到事先设置好的应用程序注册页面(http://www.mywebsite.com/register.php),并在注册页面的 URL 中加入参数 forward(例如 http://www.mywebsite.com/register.php?forward=http://www.myforums.com/index.php),用于在注册后将用户导向到指定的 URL

  • 应用程序收到此请求后,按照惯例生成表单,并增加一个表单变量,将 GET 方式传递过来的 forward 参数通过表单进行传递

  • 用户在应用程序的表单中填写注册信息,并提交到应用程序的注册验证程序。应用程序验证用户提交信息的完整性和合法性:

    • 如果不通过:提示其问题所在,要求其返回上一页重新填写

    • 如果通过,需要进行如下操作:

      • 将用户资料插入到应用程序自身用户数据库中

      • 设置自身 Cookie 或 Session,使得应用程序自身处于登录状态

      • 检查表单中是否提交了 forward 变量,如有,则意味着注册请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛注册后能够跳转回到应用程序中

      • 通过 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,将注册请求传递到论坛进行处理。其中 auth 用来将用户信息与资料以特定的格式,加密传递给论坛,forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证前面两个变量的有效性。auth、forward、verify 格式与结构将在后面进行说明


  • Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:

    • 根据 verify 判断 auth 和 forward 变量是否合法,如合法则继续,否则终止

    • 将 auth 根据既定算法解密,并还原成数组,数组的内容与格式将在后面进行说明。根据数组中的内容,检查此用户是否存在。如存在,则根据上述数组中的内容 UPDATE 论坛中相应的用户资料。如不存在,则使用数组中的信息 INSERT 到论坛用户资料表中

    • 论坛设置 Cookie 或 Session,使得论坛自身处于登录状态

    • 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL


  • 至此,注册流程结束

    本部分中,加下划线显示的部分,是需要对您的应用程序进行更改的部分,事实上,这部分更改会非常容易和方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值