读书人

JForum 的 SSO集成的有关问题解决办法

发布时间: 2012-10-28 09:54:44 作者: rapoo

JForum 的 SSO集成的问题解决方法

关于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>

读书人网 >编程

热点推荐