`
pipo
  • 浏览: 22876 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JForum与JOSSO集成单点登录

阅读更多

转载: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
  • 分享到:
    评论
    1 楼 javaliujie 2009-04-07  
    关注,,,,,,,,

    相关推荐

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

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

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

      实现了在一个网站实现多一个论坛的功能,在原网站登陆之后再Cookie保存一个值就可以实现单点登陆...我只是再原有网站可以实现单点登录到论坛.如果拿到资源不会用的也可以评论的时候带上QQ我会尽快联系。说出自己的问题

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

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

      JForum3 jforum java 开源论坛 论坛

      JForum3 jforum java 开源论坛 论坛

      jforum+ckeditor整合案例

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

      chx 学习jForum笔记十八 jForum与ms sqlserver

      NULL 博文链接:https://caihexi.iteye.com/blog/919868

      JForum论坛数据库表结构.rar

      1、附件关系表JFORUM_ATTACH 2 2、附件详细信息表JFORUM_ATTACH_DESC 2 3、附件配置限定关系表JFORUM_ATTACH_QUOTA 2 4、封锁表JFORUM_BANLIST 2 5、标识表JFORUM_BANNER 3 6、书签表JFORUM_BOOKMARKS 3 7、...

      jforum3.0所需要的jar包

      jforum3.0所需要的jar包

      jforum功能说明

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

      jforum漏洞利用源代码

      jforum漏洞利用源代码

      Jforum论坛数据库架构

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

      Jforum数据库

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

      jforum开源的论坛文档

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

      JForum3 完整项目

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

      jforum论坛整合说明

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

      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安装时,注意选择中文

      jforum安装部署指南

      jforum安装部署指南:修改对应的数据库文件JFORUM\WEB-INF\config\database下面。例如:mysql.properties修改其中的数据库信息

      jforum3源代码 数据库

      jforum3源代码数据库

      JForum 2.1.9 源码包.zip

      JForum 是采用Java开发的功能强大且稳定的论坛系统。它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多...

    Global site tag (gtag.js) - Google Analytics