0

我有一个基于JSP,Spring,Hibernate构建的 Web 应用程序。现在我想整合一个论坛。

我已经阅读了jforum安装和配置指南,这些是我需要遵循的步骤才能将其集成到我的 Web 应用程序中吗?如果没有,请告诉我如何集成jforum

4

2 回答 2

2

我正在开发一个 Web 应用程序,其中必须集成论坛功能。Jforum 被选中进行整合。Jforum 是 Java 中的开源论坛实现。

我的应用程序是使用 mysql 的spring/JSF应用程序 Db.Jforum 具有单独的用户表和单独的身份验证机制。对于集成,它提供了单点登录设施和简单的配置。通过打开“单点登录”功能,Jforum上的登录和注册屏幕将被禁用。Jforum在会话搜索记录的用户信息的特殊属性,如果用户不在其表中,它将自动创建一个。所有身份验证详细信息将由我的应用程序处理。我还想将Jforum表保存在同一个数据库中。

最初决定是在我的应用程序中保留Jforum代码还是将其作为单独的应用程序保留。 JForum有自己的前端,使用模板、不同的db配置文件和不同的风格来实现。Jforum管理还必须能够轻松访问我们的管理屏幕。

我决定将论坛代码分开,而不是让我们的应用程序代码变得笨拙。但是我在配置过程中遇到了很多问题。所以我决定将它的代码集成到同一个应用程序中。以下是我遵循的步骤。

  1. 从这里下载 jforum-2.1.8 zip

  2. 将目录重命名为JForum并将其部署(将其复制到 tomcat 的 webapp)最初作为单独的应用程序(这仅用于安装数据库。)

  3. 我在与 m 应用程序相同的数据库中安装了论坛表。如果您想将它们分开,请使用 sql 命令在 mysql 中创建所需的数据库:

    创建数据库 db_name

  4. 运行tomcat并访问以下网址:

http://localhost:8080/JForum/install.jsp

输入以下内容:

数据库类型:Mysql

安装类型:全新安装

连接类型:JDBC - 不需要此默认值

数据源名称:

数据库服务器主机名:

数据库端口:3306

数据库名称:数据库名称 - 该数据库应该存在

数据库用户名:

数据库密码:

使用连接池:将其保留为默认值 -</p>

网站链接:这应该指向您的应用程序的主页。这是 jforum 中唯一返回我们应用程序的点。取决于此,jforum 上的“返回主页”链接将起作用。

Administrator Username : <jforum admin username>

– 确保此用户名与您的 App 超级管理员用户名相同 – 它有助于加载管理控制台。

Administrator Password : <jforum admin password>

单击下一步à开始安装。表将在技能大师数据库中创建。

您现在可以访问 jforum: http://someip:8080/skillForum/forums/list.page

  1. 现在您已经安装了数据库表。这很奇怪……但我执行上述步骤只是为了安装数据库表。现在我将在我的应用程序中加入 jforum 代码。这让我对论坛有更多的控制权。

  2. 现在停止Tomcat。

  3. 将所有 jar 从已部署复制jforum/web-inf/lib

    yourApp/WEB-INF/lib 目录

  4. 将配置目录从部署复制jforum/web-inf/config到您的WEB-INF/ directory(数据库设置将在Webroot/WEB-INF/config/database/mysql/mysql.properties文件中)

  5. jforum/template目录复制到您的Webroot目录。

  6. 实施 SSO:

登录后,您必须将“<code>myAppUser”(或您希望的任何其他)会话属性设置为登录的用户名。

在您的应用程序中创建一个单独的 SSO 类。

package com.myapp.forum;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

public class MyAppSSO implements SSO{

public String authenticateUser(RequestContext request) {

String user = (String)request.getSessionContext().getAttribute(“myAppUser”);

return user;

}

public boolean isSessionValid(UserSession userSession, RequestContext request) {

if(request.getSessionContext().getAttribute(“myAppUser”) != null)

{

return true;

}else{

return false;

}

}

}

当 您第一次访问 Jforum 页面以获取登录用户时,将调用authenticateUser方法,并且 Jforum将调用isSessionValid以频繁检查会话。

会话属性设置在这里很重要。当 SSO 开启并且该会话第一次访问 Jforum 的任何页面时,authenticateUser()将调用该方法来检查登录的用户。如果它返回 null,则用户将被视为“匿名”。如果它返回一个用户名,这将根据 jforum_users 表的用户名进行验证。如果不存在用户名,则将在 jforum 的用户表中插入一个新行,其中用户名 = 在会话中找到的一个,并且用户将被标记为已登录。

打开skillForum/WEB-INF/config/ SystemGlobals.properties

更改以下属性:

authentication.type = sso

sso.implementation = com.myapp.forum.MyAppSSO
  1. Web.xml更改:

我们需要整合 web.xml 文件。

确保在 web.xml 文件的适当位置有以下内容:

<filter>

<filter-name>clickstream-jforum</filter-name>

<filter-class>

net.jforum.util.legacy.clickstream.ClickstreamFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>clickstream-jforum</filter-name>

<url-pattern>*.page123</url-pattern>

</filter-mapping>

<listener>

<listener-class>net.jforum.ForumSessionListener</listener-class>

</listener>

<!– *******  –&gt;

<servlet>

<servlet-name>jforum</servlet-name>

<servlet-class>net.jforum.JForum</servlet-class>

<init-param>

<param-name>development</param-name>

<param-value>true</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>jforum</servlet-name>

<url-pattern>*.page</url-pattern>

</servlet-mapping>

在您的应用程序中创建一个指向 url 的链接:

http://yourApp/forums/list.page
  1. 取消部署旧的 Jforum 应用程序。

深吸一口气,重启tomcat服务器。

现在您可以从您的应用程序访问 jforum。

您还可以使用 url 访问 jforum 管理控制台:

http://localhost:portno/admBase/login.page

(前提是您的超级管理员用户名和 jforum 管理员用户名相同并且在会话中)

Jforum 与 Web 应用程序的集成

于 2014-07-16T04:50:24.110 回答
0

SSO 身份验证适用于用户名,但这些用户名会显示给论坛上的访问者。一个小技巧是创建另一个版本的 SSOUtils.java 并修改方法 userExists():

public boolean userExists(String username)
{
    this.username = username;
    this.dao = DataAccessDriver.getInstance().newUserDAO();

    this.user = this.dao.findByEmail(username); // yes - username is actually email
    this.exists = this.user != null;

    return this.exists;
}

这将允许显示随机用户名,但身份验证发生在电子邮件地址上。您可能需要调整上述 MyAppSSO 类,如下所示:

public String authenticateUser(RequestContext request) {
    String user = (String)request.getSessionContext().getAttribute("appUser");
    String email = (String)request.getSessionContext().getAttribute("appEmail");

    // we are exchanging email/user values - but its correct.
    request.getSessionContext().setAttribute("email", user);
    return email;
}
于 2014-11-20T01:23:49.833 回答