[Logo]
[v2.1.7] Cookie-based JForum Single Sign-On (SSO)  XML del.icio.us HEMiDEMi funP 收進你的MyShare個人書籤 新增到udn共享書籤 plurk twitter 分享
Forum Index » JForum中文社群 JForum Chinese Users Community
Author Message
andowson

五段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 510
Location: 台北
Offline

JForum預設cookie-based的sso.implementation是net.jforum.sso.CookieUserSSO,但是原始碼並沒有這個CookieUserSSO類別,所以如果我們照著文件做會失敗。

在此附上一份經過實際測試沒有問題的CookieUserSSO.java及CookieUserSSO.class檔,如果您的需求是很單純的用Cookie來作Single Sign-On,則下載後重新編譯,將編譯後的class檔放到WEB-INF/classes/net/jforum/sso目錄下,然後重新載入JForum即可。
package net.jforum.sso;

import javax.servlet.http.Cookie;
import net.jforum.context.RequestContext;
import net.jforum.JForumExecutionContext;
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(RequestContext request) {		
		// myapp login cookie, contain logged username
		Cookie myCookie = ControllerUtils.getCookie(
				SystemGlobals.getValue(ConfigKeys.COOKIE_NAME_USER));		
		String username = null;
		
		if (myCookie != null) {
			username = myCookie.getValue();		
		}		 
		return username; // jforum username
	}

	public boolean isSessionValid(UserSession userSession, RequestContext request) {
		Cookie SSOCookie = ControllerUtils.getCookie(
				SystemGlobals.getValue(ConfigKeys.COOKIE_NAME_USER)); // myapp login cookie		
		String remoteUser = null;
		
		if (SSOCookie != null) {
			remoteUser = SSOCookie.getValue(); //  jforum username
		}

        // 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-custom.conf,設定範例如下:
authentication.type=sso
sso.implementation=net.jforum.sso.CookieUserSSO
sso.redirect=http://member.andowson.com/login.jsp
cookie.name.user=username

紅色字體部分即是您需要依您實際狀況修改的地方,例如上面的例子意思是您的會員登入是在member.andowson.com控管,而login.jsp在驗證完畢後,會寫入一個username的cookie(domain需是andowson.com),並讀出returnUrl參數來導回到原來的網址去。

參考資料:
http://www.jforum.net/posts/list/3619.page
 Filename CookieUserSSO.java [Disk] Download
 Description CookieUserSSO.java
 Filesize 2 Kbytes
 Downloaded:  43 time(s)

 Filename CookieUserSSO.class [Disk] Download
 Description CookieUserSSO.class
 Filesize 2 Kbytes
 Downloaded:  34 time(s)

This message was edited 11 times. Last update was at 2007-10-15 13:29:47


分享經驗 累積智慧
[WWW] [MSN]
windstorm

九級學員
[Avatar]

Joined: 2007-05-20 09:06:10
Messages: 14
Offline

最近我也在研究JForum的單點登錄,歡迎感興趣的朋友訪問《JForum與JOSSO集成單點登錄》:http://www.jeedao.net/posts/list/44.page

Java EE 軟件之道
 
Forum Index » JForum中文社群 JForum Chinese Users Community
Go to:   

交換連結乌托邦博客 
在本站刊登廣告
練功房推薦書單
SCJP 6.0認證教戰手冊 (附光碟) 雲端策略:雲端運算與虛擬化技術 SCJP Java 6專業認證手冊 Java認證SCJP 6.0/5.0--猛虎出閘 SCWCD 5 猛虎出閘:Java Web 應用程式專業認證 SCWCD專業認證手冊 Head First Servlets and JSP
[版權說明] 本站授權方式:創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款
Creative Commons License
Powered by JForum 2.2.0 © JForum Team