转载:http://www.jeedao.net/posts/list/0/44.page
本文以JForum v2.1.7和JOSSO v1.5为例说明,JForum论坛单点登录的集成。
JForum在设计之初就考虑了与其它系统进行SSO单点登录集成的接口,你需要做的是:
编写一个对接口net.jforum.sso.SSO.java的实现类。
修改配置文件“SystemGlobals.properties”,更改JForum的认证模式。
对JOSSO和jforum的相关配置文件进行设置。
要与JOSSO集成,当然是先到http://www.josso.org/去下载一个JOSSO啦,呵呵。我下载的是“apache-tomcat-5.5.20_josso-1.5.zip”,这个包已经把大部分的配置设置好了,你不需要进行太多的设置工作。
下面我们来看看整个配置过程吧:
解开“apache-tomcat-5.5.20_josso-1.5.zip”得到目录“apache-tomcat-5.5.20_josso-1.5”,我们把jforum论坛拷贝到“\apache-tomcat-5.5.20_josso-1.5\webapps”目录下。
出于实验目的我们需要先在jforum论坛中注册一个用户“user1”,所以我们先启动tomcat,注册一个用户名为“user1”的论坛用户。
打开“\apache-tomcat-5.5.20_josso-1.5\bin”目录下的“josso-agent-config.xml”配置文件,参照原来的配置增加以下配置描述:
Code:
<partner-app>
<context>/jforum</context>
</partner-app>
为JForum论坛编写单点登录实现类,代码如下:
Code:
package net.jforum.sso;
import net.jforum.context.RequestContext;
import net.jforum.JForumExecutionContext;
import net.jforum.entities.UserSession;
import net.jforum.util.preferences.ConfigKeys;
import net.jforum.util.preferences.SystemGlobals;
import org.apache.log4j.Logger;
public class Josso implements SSO {
static final Logger logger = Logger.getLogger(Josso.class.getName());
public String authenticateUser(RequestContext request) {
String remoteUser = null;
remoteUser = request.getRemoteUser();
logger.info("remoteUser:" + remoteUser);
if(remoteUser == null) {
JForumExecutionContext.setRedirect(SystemGlobals.getValue(ConfigKeys.SSO_REDIRECT));
return null;
}
if (remoteUser == null || remoteUser.trim().equals("")) {
JForumExecutionContext.setRedirect(SystemGlobals.getValue(ConfigKeys.SSO_REDIRECT));
return null; // no user found
}
return remoteUser; // jforum username
}
public boolean isSessionValid(UserSession userSession, RequestContext request) {
String remoteUser = null;
remoteUser = request.getRemoteUser(); // jforum username
logger.info("remoteUser:" + remoteUser);
// user has since logged out
if(remoteUser == null &&
userSession.getUserId() != SystemGlobals.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
return false;
// user has since logged in
} else if(remoteUser != null &&
userSession.getUserId() == SystemGlobals.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
return false;
// user has changed user
} else if(remoteUser != null && !remoteUser.equals(userSession.getUsername())) {
return false;
}
return true; // myapp user and forum user the same
}
}
更改JForum的配置文件“SystemGlobals.properties”:
authentication.type = sso
sso.implementation = net.jforum.sso.Josso
更改JForum论坛的web.xml文件,在web.xml文件增加以下配置:
Code:
<security-constraint>
<!-- Sample Security Constraint -->
<web-resource-collection>
<!-- We're going to protect this resource and make it available only to users in "role1". -->
<web-resource-name>public-resources</web-resource-name>
<url-pattern>/resources/*</url-pattern>
<http-method>HEAD</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<!--
No roles required, it means that this are public resources !
Usefull to tell JOSSO that resources matching this security constraint
should not be subject to SSO protection.
-->
</security-constraint>
<security-constraint>
<!-- Sample Security Constraint -->
<web-resource-collection>
<!-- We're going to protect this resource and make it available only to users in "role1". -->
<web-resource-name>protected-resources</web-resource-name>
<url-pattern>/josso/*</url-pattern>
<url-pattern>/protected/*</url-pattern>
<url-pattern>/forums/*</url-pattern>
<http-method>HEAD</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<!-- NOTE: This role names will be retrieved by Josso using the propper identity store. -->
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- We only need tomcat to redirect the user -->
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<!--
NOTE: This will redirect the user to the propper login page provided by JOSSO.
-->
<form-login-page>/login-redirect.jsp</form-login-page>
<form-error-page>/login-redirect.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role >
<description>Role 1</description>
<role-name>role1</role-name>
</security-role>
好了,现在你重新启动tomcat,并访问论坛:http://localhost:8080/jforum/forums/list.page
呵呵,页面被重定向到JOSSO的用户登录页面去了。请在登录页面输入用户名:user1,密码:user1pwd,成功登录后页面会自动重定向到http://localhost:8080/jforum/forums/list.page,并且jforum论坛显示用户:user1已经处于在线登录状态了。
细心查看JForum论坛的页面你会发现,论坛中的退出按钮已经不见了,这是因为退出功能应该由你的JOSSO来实现的原因。还有就是那个JForum原来的那个登录输入框也没有了。
呵呵,别以为你已经完成单点登录的整合了哦,还有很多工作要做呢。例如,用户注册的时候你必须同时把jforum论坛必须的信息也保存到jforum论坛的相关库表中;你需要为论坛安置一个正确的退出按钮连接;你需要美好JOSSO的登录界面等。
trackback:http://www.jeedao.net/posts/list/0/44.page
分享到:
相关推荐
Jforum是一款基于Java技术的开源论坛软件,它提供了丰富的社区功能,包括主题讨论、用户管理、权限控制、单点登录等。这款论坛系统以其稳定性和可扩展性而受到开发者的青睐。在深入理解Jforum的过程中,源码解析是至...
在与其他Web应用集成时,为了提供无缝的用户体验,通常需要实现单点登录(SSO,Single Sign On)。SSO允许用户在一个系统登录后,无需再次认证即可访问其他关联的系统,提升了用户体验。 JForum的SSO机制主要依赖于...
实现了在一个网站实现多一个论坛的功能,在原网站登陆之后再Cookie保存一个值就可以实现单点登陆...我只是再原有网站可以实现单点登录到论坛.如果拿到资源不会用的也可以评论的时候带上QQ我会尽快联系。说出自己的问题
《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...
9. **API接口**:提供API接口,允许与其他系统集成,如SSO单点登录和第三方插件。 10. **丰富的插件和模块**:JForum3拥有众多插件和模块,可以扩展论坛功能,如积分系统、投票模块等。 在rafalsteil-jforum3-f4814...
JForum3可能提供了API接口,允许与其他系统进行集成,如社交媒体登录、第三方统计分析等。 通过研究JForum3的源代码,开发者不仅可以学习到Java Web开发的最佳实践,还能掌握如何构建一个健壮、易扩展的社区平台。...
本篇文章将深入探讨JForum源码中的核心知识点,以及它如何与FreeMarker结合提供动态网页生成。 1. **FreeMarker模板引擎** FreeMarker是一个用Java语言编写的模板引擎,用于生成动态内容。在JForum中,FreeMarker...
8. **集成其他服务**:可与其他服务如邮件、RSS订阅、OpenID等进行集成,增强用户体验。 **技术架构** JForum3 基于Java Servlet和JavaServer Pages(JSP)技术,使用MVC(Model-View-Controller)设计模式。主要...
3. **数据库连接jar**:jForum需要与数据库进行交互,存储用户信息、帖子内容等数据。因此,需要数据库驱动的jar包,如mysql-connector.jar(如果使用MySQL)或者ojdbc.jar(如果使用Oracle)。这些jar包提供了与...
**集成Jforum 2.19到MyEclipse** 的步骤如下: 1. **导入源码**:在MyEclipse中,选择“File” > “Import”,然后选择“Existing Projects into Workspace”,浏览并导入解压后的Jforum源代码目录。 2. **添加JAR...
Jforum通常使用Hibernate或iBatis等ORM框架,通过SQL语句与数据库交互。理解如何配置数据源、编写实体类、映射文件以及执行查询和更新操作,对于论坛的数据库管理至关重要。 文件监控通常涉及到论坛上传的附件和...
5. **集成性**:由于金山顶尖的Web服务基于Java,与Jforum的集成更加顺畅。 然而,Jforum也存在一些挑战: 1. **界面与功能模块**:Jforum的前端界面和功能模块可能需要重新设计和整理,以满足特定需求。 2. **...
### jforum开源论坛的核心知识点 #### 一、jForum简介 jForum是一款基于Java语言编写的开源论坛系统,它提供了一套完整的社区解决方案,适用于构建各类在线社区与论坛。jForum以其灵活的架构、丰富的功能及优秀的...
通过以上步骤,我们可以成功地将CKEditor集成到JForum中,提供一个功能强大、用户体验良好的富文本编辑环境。这不仅提升了用户在论坛中的交互体验,也使论坛的内容更加丰富和多样化。然而,整合过程中需要注意安全...
为了成功运行JForum 3.0,我们需要了解和掌握以下几个关键知识点: 1. **Java环境**:首先,确保你已经安装了Java Development Kit (JDK)。JForum是用Java编写的,因此运行它需要Java环境支持。至少需要JDK 1.8或更...
本文将围绕"jforum漏洞利用源代码"这一主题,深入探讨相关知识点。 1. **JForum漏洞类型** JForum中的漏洞主要分为两类:一类是逻辑漏洞,如权限绕过、SQL注入等;另一类是安全配置错误,如弱密码策略、未加密敏感...
6. **API接口**:提供API接口,便于与其他系统集成,如用户认证、内容同步等。 接下来,我们来探讨JForum 2.1.8的安装步骤: 1. **环境准备**:确保已安装Java Development Kit(JDK)和一个兼容的Web服务器(如...
本篇将深入探讨JForum3的源代码和其与数据库的交互,以及如何进行配置。 **一、JForum3源代码结构** JForum3的源代码主要由以下几个部分组成: 1. **Web前端**:基于Servlet和JSP,负责处理HTTP请求,呈现HTML...