zoukankan      html  css  js  c++  java
  • 开源论坛jforum的集成

    Jforum是一款开源的java类的论坛,小巧高效,运用了很多JSP新技术,支持hsqldboraclemysql postgresql数据库,完全遵从MVC设计模式。

    1.首先下载最新的版本(更多信息请参考项目主页: www.jforum.net

    2.创建数据库,它支持多种数据库,可以根据自己需求选定。

    3.将jforum.war复制到tomcat目录下,启动tomcat。

    4.打开浏览器,进入http://127.0.0.1:8080/jforum/install.jsp
    进行自动安装,按照提示进行填写。

    5.完成安装后先不进入论坛。修改一些配置文件以支持中文。(虽然上面安装过程也设置,主要针对中文乱码问题)

    (1)打开jforum/WEB-INF/config/SystemGlobals.properties
     
    default.container.encoding = ISO-8859-1,修改为:
      default.container.encoding = UTF-8

    (2)打开jforum/WEB-INF/config/jforum-custom.conf
     
    定位到database.connection.string一项,在末尾追加
      &useUnicode=true&characterEncoding=utf8 

    6.重新启动tomcat,进入http://127.0.0.1:8080/jforum/forums/list.page

      admin身份登录,可以到后台设置论坛了。

    7.论坛与自己已有项目的集成(根据自己需要,我这里是自己已有项目已有用户管理,不想多次登录,这里使用jforum提供的SSO技术)

    (1)修改.jforum源码,实现net.jforum.sso接口 

    public class CookieUserSSO implements SSO {
    static final Logger logger = Logger.getLogger(CookieUserSSO.class.getName());
    public String authenticateUser(RequestContext 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();
    }
    logger.info("cookie username="+username);
    System.out.println("cookie username="+username);
    return username; // return username for jforum
    // jforum will use this name to regist database or set in HttpSession 
    }
    public boolean isSessionValid(UserSession userSession,
    RequestContext 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. 
    }
    } 


    将编译后的.class文件存放在jforumWEB-INFclasses etjforumsso下

    (2)修改SystemGlobals.properties中的配置: 
    修改SystemGlobals.properties文件中的一下属性的内容: 

    authentication.type = sso
    sso.implementation = net.jforum.sso.CookieUserSSO
    sso.redirect = http://www.123.com/login.jsp //可根据实际的登录页面地址进行修改 
    cookie.name.user = 123UserInfo //自己项目中保存的cookie名称,可根据实际情况修改 

    (3)修改web应用中的登录和注销部分的逻辑: 

    登录部分加入以下代码:
    ...
    Cookie cookie = new Cookie("springTourUserInfo", sname);
    cookie.setMaxAge(-1);
    cookie.setPath("/");//cookie只在同一应用服务器有效 
    response.addCookie(cookie);
    ...
    注销部分加入以下代码:
    ......
    Cookie cookie = new Cookie("springTourUserInfo", "");
    cookie.setMaxAge(0); // delete the cookie. 
    cookie.setPath("/");
    response.addCookie(cookie);
    ...... 

    (4)在自己项目中增加论坛的链接: 
    <a href="/forum">论坛</a> 

    这样就ok了就可以使用了


    相关知识,一并附上

    实现SSO的技术主要有:
    (1)基于cookies实现,需要注意如下几点:如果是基于两个域名之间传递sessionid的方法可能
    在windows中成立,在unix&linux中可能会出现问题;可以基于数据库实现;在安全性方面可能会
    作更多的考虑。另外,关于跨域问题,虽然cookies本身不跨域,但可以利用它实现跨域的SSO。
    (2)Broker-based(基于经纪人),例如Kerberos等;
    这种技术的特点就是,有一个集中的认证和用户帐号管理的服务器。经纪人给被用于进一步请求
    的电子的身份存取。中央数据库的使用减少了管理的代价,并为认证提供一个公共和独立的"第三方"。
    例如Kerberos,Sesame,IBM KryptoKnight(凭证库思想)等。Kerberos是由麻省理工大学发明的安全
    认证服务,当前版本V5,已经被UNIX和Windows作为默认的安全认证服务集成进操作系统。
    (3)Agent-based(基于代理人)
    在这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序
    需要设计有不同的功能。比如, 它可以使用口令表或加密密钥来自动地将认证的负担从用户移开。
    代理人被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个"翻译"。例如SSH等。
    (4)Token-based,例如SecurID,WebID,
    现在被广泛使用的口令认证,比如FTP,邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令
    在多种应用当中使用。
    (5)基于网关
    Agent and Broker-based,这里不作介绍。
    (6)基于安全断言标记语言(SAML)实现,SAML(Security Assertion Markup Language,安全断言标记语言)
    的出现大大简化了SSO,并被OASIS批准为SSO的执行标准。开源组织OpenSAML 实现了 SAML 规范,
    可参考http://www.opensaml.org/
    CAS由耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,
    支持代理功能。


  • 相关阅读:
    未格式化的输入/输出操作
    格式化输入与输出
    随机数
    正则表达式
    bitset
    tuple
    servlet笔记
    springside
    maven
    Lua简易入门教程
  • 原文地址:https://www.cnblogs.com/riskyer/p/3292054.html
Copyright © 2011-2022 走看看