技术开发 频道

JForum 的 SSO集成的问题解决

【IT168技术文档】关于JForum论坛的基本情况就不在此介绍了,官方网址:www.jforum.net.jforum论坛系统的安装也很简单,按照官方文档,或者google一下,基本都可以搞定,在此就不在介绍了。

大概描述一下我使用jforum的情况:
1.应用服务器:weblogic8.1
2.数据库:oracle10g
3.已有一个电子商务网站,需要和jforum进行简单的集成,提供sso(单点登录的功能)。
4.说明:已有的电子商务网站域名:http://www.123.com jforum域名:www.123.com/forum,电子商务网站和jfroum在统一台服务器和同一应用服务器下,如果分开可能会存在session或cookie访问的问题。
5.JForum版本:2.1.8


下面简要的介绍一下使用cookie进行jforum和电子商务网站的sso集成的过程:
(1)实现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. } }


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


0
相关文章