将jforum与我的Java web应用程序集成的步骤



我有一个基于JSP、Spring、Hibernate的web应用程序。现在我想整合一个论坛。

我已经阅读了jforum安装和配置指南,这些是我将其集成到web应用程序所需要遵循的步骤吗?如果没有,请让我知道如何集成jforum

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

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

最初的决定是将Jforum代码保留在我的应用程序中,还是将其作为一个单独的应用程序JForum有自己的前端,使用模板、不同的数据库配置文件和不同的风格来实现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

输入以下内容:

DataBaseType:Mysql

安装类型:新安装

连接类型:JDBC–保留此默认值不需要

数据源名称:

数据库服务器主机名:

数据库端口:3306

数据库名称:数据库名称–此数据库应存在

数据库用户名:

数据库密码:

使用连接池:将其保留为默认值–

网站链接:这应该指向您的应用程序主页。这是jforum中返回到我们的应用程序的唯一一点。根据这一点,jforum上的"返回主页"链接将起作用。

Administrator Username : <jforum admin username>

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

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:

登录后,您必须将"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的用户表中插入一个新行,其中username=one在会话中找到,用户将被标记为已登录。

打开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>
<!– *******  –>
<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>

在你的应用程序中创建一个指向网址的链接:

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

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

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

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

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

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

Jforum与web应用程序的集成

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;
}

相关内容

  • 没有找到相关文章

最新更新