关于jforum的二次开发的经验

关于jforum的二次开发的心得
   最近系统,论坛选择了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});