練功房推薦書單

  • 猛虎出柙雙劍合璧版:最新 OCA / OCP Java SE 7 Programmer 專業認證
  • 流浪教師存零股存到3000萬
  • SCJP 6.0認證教戰手冊(第二版)Oracle Certified Professional Java Programmer(附光碟)
  • 小資女艾蜜莉:我的資產翻倍存股筆記
[v2.1.7] Cookie-based JForum Single Sign-On (SSO)  RSS feed
討論區首頁 » JForum中文社群 JForum Chinese Users Community
發表人 內容
andowson

七段學員
[Avatar]

註冊時間: 2007-01-02 22:20:40
文章: 704
來自: 台北
離線
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
http://www.coderanch.com/t/577176/jforum/Cookie-based-SSO
 檔案名稱 CookieUserSSO.java [Disk] 下載
 描述 CookieUserSSO.java
 檔案大小 2 Kbytes
 下載次數:  50 次

 檔案名稱 CookieUserSSO.class [Disk] 下載
 描述 CookieUserSSO.class
 檔案大小 2 Kbytes
 下載次數:  39 次


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

九級學員
[Avatar]

註冊時間: 2007-05-20 09:06:10
文章: 13
離線
最近我也在研究JForum的單點登錄,歡迎感興趣的朋友訪問《JForum與JOSSO集成單點登錄》:http://www.jeedao.net/posts/list/44.page
備用網址:http://pipo.iteye.com/blog/82999

Java EE 軟件之道
xiaofanku

十級學員

註冊時間: 2014-06-17 13:50:51
文章: 2
離線
很神奇的功能,如果在网站中用的密码,在jforum中登陆好用吗
 
討論區首頁 » JForum中文社群 JForum Chinese Users Community
前往: