最近系统,论坛选择了jforum,因为是集成到自己的系统,所以登录成了难点。不过jforum提供了自己SSO类来实现单点登录,但是问题来了,jforum有两种登录方式,一种是直接在论坛注册,登录,一种在自己的新闻系统注册登录然后转到论坛,可是jforum同时只能支持一种!!
也就说你想在论坛直接注册登录就不能使用SSO,如果想使用SSO,就没法直接在论坛直接登录了!! 但是我想既能在论坛登录,也能在自己的应用系统登录后跳转,所以就改了一部分源码,实现了上述的想法,和大家分享下:
对jforum源代码修改过的地方如下:
1.对搜索中文出现乱码的修改:
修改SystemGlobals.properties文件的default.container.encoding的属性值为utf-8
2.对连接数据库时用户名和密码读取的修改:
在net.jforum.C3P0PooledConnection.init方法里添加
this.ds.setPassword(SystemGlobals.getValue(ConfigKeys.DATABASE_CONNECTION_PASSWORD));
this.ds.setUser(SystemGlobals.getValue(ConfigKeys.DATABASE_CONNECTION_USERNAME));
3.添加SSO的支持
#增加类:net.forum.CookieUserSSO
#修改SystemGlobals.properties文件中关于SSO的属性,具体参考该文件
#修改/templates/default/header.htm: 修改因为使用SSO而造成的对注销,登入,注册等选项的屏蔽
去掉这三个选项外的<#if !sso>选择条件
#对SSO后注销功能的修改:
在net.jorum.view.forum.UserAction.logout()添加对cookie的删除:
Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals .getValue(ConfigKeys.COOKIE_NAME_USER));
if(cookieNameUser != null) {
cookieNameUser.setMaxAge(0);
cookieNameUser.setPath("/");
this.response.addCookie(cookieNameUser);
}
#对SSO后注册被关闭的修改:
在net.jforum.view.forum.insert(boolean hasErrors)中,注释掉对是否SSO的判断
/*|| ConfigKeys.TYPE_SSO.equals(SystemGlobals.getValue(ConfigKeys.AUTHENTICATION_TYPE)*/
在net.jforum.view.forum.insertSave( )中,注释掉对是否SSO的判断
/*|| ConfigKeys.TYPE_SSO.equals(SystemGlobals.getValue(ConfigKeys.AUTHENTICATION_TYPE)*/
#对SSO后登入被关闭的修改:
在net.jforum.view.forum.login( )中,注释掉对是否SSO的判断
// if (ConfigKeys.TYPE_SSO.equals(SystemGlobals.getValue(ConfigKeys.AUTHENTICATION_TYPE))) {
// this.registrationDisabled();
// return;
// }
在net.jforum.ControllerUtils.refleshSession( )中,注释掉对是否SSO的判断
// If SSO, then check if the session is valid
// if (!sso.isSessionValid(userSession, request)) {
// SessionFacade.remove(userSession.getSessionId());
// refreshSession();
// }
// }
#对SSO后创建的密码进行MDS加密:
在net.jforum.sso.SSOUtils.register()中添加加密语句:
user.setPassword(MD5.crypt(password.trim()));
#对SSO后台管理员直接添加为论坛的超版:
在net.jforum.sso.SSOUtils.register()中添加用户和组关系语句:
int userId = this.dao.addNew(user);
//2为超版的ID号
this.dao.addToGroup(userId, new int[]{2});
也就说你想在论坛直接注册登录就不能使用SSO,如果想使用SSO,就没法直接在论坛直接登录了!! 但是我想既能在论坛登录,也能在自己的应用系统登录后跳转,所以就改了一部分源码,实现了上述的想法,和大家分享下:
对jforum源代码修改过的地方如下:
1.对搜索中文出现乱码的修改:
修改SystemGlobals.properties文件的default.container.encoding的属性值为utf-8
2.对连接数据库时用户名和密码读取的修改:
在net.jforum.C3P0PooledConnection.init方法里添加
this.ds.setPassword(SystemGlobals.getValue(ConfigKeys.DATABASE_CONNECTION_PASSWORD));
this.ds.setUser(SystemGlobals.getValue(ConfigKeys.DATABASE_CONNECTION_USERNAME));
3.添加SSO的支持
#增加类:net.forum.CookieUserSSO
#修改SystemGlobals.properties文件中关于SSO的属性,具体参考该文件
#修改/templates/default/header.htm: 修改因为使用SSO而造成的对注销,登入,注册等选项的屏蔽
去掉这三个选项外的<#if !sso>选择条件
#对SSO后注销功能的修改:
在net.jorum.view.forum.UserAction.logout()添加对cookie的删除:
Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals .getValue(ConfigKeys.COOKIE_NAME_USER));
if(cookieNameUser != null) {
cookieNameUser.setMaxAge(0);
cookieNameUser.setPath("/");
this.response.addCookie(cookieNameUser);
}
#对SSO后注册被关闭的修改:
在net.jforum.view.forum.insert(boolean hasErrors)中,注释掉对是否SSO的判断
/*|| ConfigKeys.TYPE_SSO.equals(SystemGlobals.getValue(ConfigKeys.AUTHENTICATION_TYPE)*/
在net.jforum.view.forum.insertSave( )中,注释掉对是否SSO的判断
/*|| ConfigKeys.TYPE_SSO.equals(SystemGlobals.getValue(ConfigKeys.AUTHENTICATION_TYPE)*/
#对SSO后登入被关闭的修改:
在net.jforum.view.forum.login( )中,注释掉对是否SSO的判断
// if (ConfigKeys.TYPE_SSO.equals(SystemGlobals.getValue(ConfigKeys.AUTHENTICATION_TYPE))) {
// this.registrationDisabled();
// return;
// }
在net.jforum.ControllerUtils.refleshSession( )中,注释掉对是否SSO的判断
// If SSO, then check if the session is valid
// if (!sso.isSessionValid(userSession, request)) {
// SessionFacade.remove(userSession.getSessionId());
// refreshSession();
// }
// }
#对SSO后创建的密码进行MDS加密:
在net.jforum.sso.SSOUtils.register()中添加加密语句:
user.setPassword(MD5.crypt(password.trim()));
#对SSO后台管理员直接添加为论坛的超版:
在net.jforum.sso.SSOUtils.register()中添加用户和组关系语句:
int userId = this.dao.addNew(user);
//2为超版的ID号
this.dao.addToGroup(userId, new int[]{2});