开源论坛jforum的集成

Jforum是一款开源的java类的论坛,小巧高效,运用了不少JSP新技术,支持hsqldboraclemysql postgresql数据库,彻底听从MVC设计模式。java

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

2.建立数据库,它支持多种数据库,能够根据本身需求选定。linux

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

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

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

(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 
windows

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文件存放在jforum\WEB-INF\classes\net\jforum\sso下

 

(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),应用普遍,具备独立于平台的,易于理解, 支持代理功能。

相关文章
相关标签/搜索