`
enica
  • 浏览: 68768 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JForum单点登陆原理与配置

阅读更多
在最近做项目的时候需要论坛系统,经过调研,最后确定使用jforum来作做二次开发!

JForum是一个功能强大的开放源代码的BBS论坛。
本文介绍 JForum与已有的web应用的整合,以及JForum单点登陆原理与配置。

JForum可以单独作为一个BBS论坛运行,但是很多情况,我们需要在我们已有的WEB应用中集成JForum。
JForum的与已有WEB应用的集成有很多种方法。本文介绍JForum官方推荐的通过自定义SSO类实现来完成JForum与已有WEB应用的集成。

目标:
实现SSO (Single Sign On) :单点登陆。
一般来说,两个不同系统的整合的难点部分,便是需要解决单点登陆问题。
对于我们已有的WEB应用中的用户,若该用户已经登陆,并通过 联结迁移到JForum页面时,JForum要能够识别该用户已经登陆(不需要二次登陆)才不会让用户感到别扭(对用户来说,就好像使用的是同一个系统似的)。
但由于分属于2个不同的系统,所以它们之间不能共用同一套Session,这就需要使用一种特殊的机制来实现它们之间的互相通信。

好在,JForum为我们考虑到了这一点,它提供了灵活的SSO接口与配置机制,我们只需要简单地实现一个SSO类,同时在JForum的配置文件中加以配置即可。

JForum SSO机制的原理
- 当一个用户访问JForum时,JForum便会检查是否配置SSO,如果配置了SSO,JForum便会调用authenticateUser()方法。该方法简单地返回username或null。
- 若返回了一个不为空的username时,JForum将会检查是否匹配JForum数据库的userid。
- 若没有匹配的userid,JForum将动态加以创建
- JForum设置该user为登陆状态
- 若返回了一个null,则设置为“Anonymous”
- 若一个“Anonymous”用户试图访问权限以外的页面,JForum将根据SSO的设置导航到登陆页面,同时传递给一个登陆成功后应该迁移到的地址参数给login页面。


JForum SSO的实现
上面,我们大致了解了一下JForum的SSO机制的原理。根据SSO机制的原理,我们已经知道该怎么实现SSO。
1,需要实现一个SSO类,该类需要取得从另外一个系统登陆进来的用户信息。
一种最简单的方法是使用Cookie来实现。让已有的WEB应用在用户登陆时写入Cookie信息,然后JForum的SSO实现类中将该Cookie取出即可。
另外,还可以使用web-service,文件的写入等等方式来实现。反正一个最基本的原则是:用户登陆时写入用户信息,然后在JForum一方能取出相同信息即可。

实现SSO类:
CookieUserSSO.java
package net.jforum.sso;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import net.jforum.ActionServletRequest;
import net.jforum.ControllerUtils;
import net.jforum.entities.UserSession;
import net.jforum.util.preferences.ConfigKeys;
import net.jforum.util.preferences.SystemGlobals;

import org.apache.log4j.Logger;

public class CookieUserSSO implements SSO {
static final Logger logger = Logger.getLogger(CookieUserSSO.class.getName());

public String authenticateUser(ActionServletRequest request) {
// login cookie set by my web LOGIN application
Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals
.getValue(ConfigKeys.COOKIE_NAME_USER));
String username = null;

if (cookieNameUser != null) {
username = cookieNameUser.getValue();
}
return username; // return username for jforum
// jforum will use this name to regist database or set in HttpSession
}

public boolean isSessionValid(UserSession userSession, HttpServletRequest request) {
Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals
.getValue(ConfigKeys.COOKIE_NAME_USER)); // user cookie
String remoteUser = null;

if (cookieNameUser != null) {
remoteUser = cookieNameUser.getValue(); // jforum username
}

if (remoteUser == null
&& userSession.getUserId() != SystemGlobals
.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
// user has since logged out
return false;
} else if (remoteUser != null
&& userSession.getUserId() == SystemGlobals
.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
// anonymous user has logged in
return false;
} else if (remoteUser != null
&& !remoteUser.equals(userSession.getUsername())) {
// not the same user (cookie and session)
return false;
}
return true; // myapp user and forum user the same. valid user.
}
}
JForum本身也提供了一个RemoteUserSSO.java实现,由于该实现的authenticateUser方法只是简单地返回request.getRemoteUser(),不能显示已登陆的用户名,另外我们也可以对放进cookies的信息进行一些加密。

2,配置JForum。

修改SystemGlobals.properties
有些JForum版本为jforum-custom.conf文件。
   查找“SSO”字样,找到“SSO / User authentication”配置部分,将其修改为以下内容:

authentication.type = sso
##...
sso.implementation = net.jforum.sso.CookieUserSSO
并根据实际情况,修改
cookie.name.user=“你应用添加的cookies名”

3,修改你的web应用用户登陆/注销部分的代码逻辑部分:

登陆部分加入以下内容:
 
public void doLogin() {
    ...
    Cookie cookie = new Cookie(jforumSSOCookieNameUser, loginUser.getUsername());
    cookie.setMaxAge(-1);
    cookie.setPath("/"); //设置目录为根路径使cookie共享
    response.addCookie(cookie);
    ...
}
注销部分加以以下内容:
 
public void doLogout() {
    ...
    Cookie cookie = new Cookie(jforumSSOCookieNameUser, "");
    cookie.setMaxAge(0); // delete the cookie.
    cookie.setPath("/"); //设置目录为根路径使cookie共享
    response.addCookie(cookie);
    ...
}
forumSSOCookieNameUser为cookie.name.user的设置内容。

设置了单点登陆后,jforum的注册及登陆都会交给你的应用去实现了,所以你还要修改一下jforum的模板,把注册及登陆的连接指向你应用的相应页面!

来自http://www.crazyjava.org/archiver/?tid-218.html
分享到:
评论
3 楼 jinjiankang 2010-03-05  
请教:整合后,%Tomcat%\webapps 下有两个应用吗?即一个应用A、一个jforum应用吗?目录结构形如:
webapps
   + A
       + WEB-INF
   + jforum
       + WEB-INF
2 楼 enica 2010-01-12  
首先你有一个应用A和一个jforum应用,做单点登录的目的就是2个应用都通过应用A来登录,注册,注销。所以原先jforum给的首页模板的登录、注册、注销的连接就需要修改成应用A的连接地址。
如jforum工程的head.htm里面的${I18n.getMessage("ForumBase.login")}、${I18n.getMessage("ForumBase.register")}对应的href就需要修改成你A应用的login,register地址
1 楼 horseroad 2010-01-10  
你好,最近网站遇到了想你所说的这种问题,在你文章的最后一句(设置了单点登陆后,jforum的注册及登陆都会交给你的应用去实现了,所以你还要修改一下jforum的模板,把注册及登陆的连接指向你应用的相应页面)我没理解,可不可以耽误你几分钟时间再具体说一下可以同吗?现在项目上时间比较紧张,如果能帮一下忙的话真是感激不尽。

相关推荐

    JForum_SSO_-_JForum单点登陆原理与配置

    一般来说,两个不同系统的整合的难点部分,便是需要解决单点登陆问题。 对于我们已有的WEB应用中的用户,若该用户已经登陆,并通过 联结迁移到JForum页面时,JForum要能够识别该用户已经登陆(不需要二次登陆)才...

    jforum说明文档 源码解析 单点登录 jforum缓存

    jforum的开发文档,以及源码解析 数据库 重要配置文件和包,缓存 权限控制 单点登录

    Jforum二次开发实现SSO登陆(单点登录)

    实现了在一个网站实现多一个论坛的功能,在原网站登陆之后再Cookie保存一个值就可以实现单点登陆当然还可以加一些Token的验证安全性可以自己考虑.当然再网页里面CookieUserSSO实现登陆的那个实例这里也有做了一下...

    jforum配置安装介绍+源代码

    jforum配置安装介绍+源代码 jforum配置安装介绍+源代码

    JForum论坛数据库表结构.rar

    3、附件配置限定关系表JFORUM_ATTACH_QUOTA 2 4、封锁表JFORUM_BANLIST 2 5、标识表JFORUM_BANNER 3 6、书签表JFORUM_BOOKMARKS 3 7、版面分类表JFORUM_CATEGORIES 3 8、配置表JFORUM_CONFIG 4 9、扩展表...

    JForum3 jforum java 开源论坛 论坛

    JForum3 jforum java 开源论坛 论坛

    jforum漏洞利用源代码

    jforum漏洞利用源代码

    jforum3.0所需要的jar包

    jforum3.0所需要的jar包

    Jforum相关文档和PPT

    Jforum的配置、初始化流程 处理请求流程(mvc) 数据库访问实现 文件监控、缓存实现 、权限控制PPt简介

    Jforum论坛数据库架构

    Jforum论坛数据库架构Jforum论坛数据库架构

    JForum3 完整项目

    jforum 完整源代码,从svn上 导出 没有任何修改

    jforum3源代码 数据库

    jforum3源代码数据库

    jforum功能说明

    JForum是著名的开源论坛,支持多达数十种的多国语言,其中包括简体中文。JForum功能强大,界面美观,加上代码结构清晰,而且采用的是BSD授权,不必担心不必要的版权纠纷。可以说JForum是论坛二次开发的绝佳选择。 ...

    jforum开源的论坛文档

    jforum开源的论坛文档jforum开源的论坛文档jforum开源的论坛文档

    jforum论坛图片资源

    用于配置中文jforum,里面包含各种语言的图片文件,将其中的zh_CN目录复制到jforum安装目录下的templates\default\images。就可以显示中文图片

    jforum论坛整合说明

    本文档是自己在做jforum二次开发过程中遇到的一些问题的总结。如果你做jforum整合,相信会给你帮助。

    jforum+ckeditor整合案例

    jforum与ckeditor整合,替换自带的编辑器

    Jforum数据库

    JForum - Java论坛系统 数据库表结构,如:附件关系表JFORUM_ATTACH,附件详细信息表JFORUM_ATTACH_DESC,用户分组表JFORUM_GROUPS等表结构说明,如帖子表JFORUM_POSTS说明: 名称 字段名 字段类型 字段说明 帖子...

    JForum数据库ER图

    JForum 开源论坛系统的 数据库ER图,很详细。

    JForum2.6.2.rar

    1、包含jforum2.6.2的war包、源码包 2、war包可直接放在tomcat的webapps目录下 3、2.6.2版本里面自带汉化功能,在http://localhost:8080/jforum/install.jsp安装时,注意选择中文

Global site tag (gtag.js) - Google Analytics