開源論壇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),應用普遍,具備獨立於平臺的,易於理解, 支持代理功能。

相關文章
相關標籤/搜索