`

openfire整合现有系统用户

    博客分类:
  • xmpp
 
阅读更多

公司oa系统与公司openfire 用户不同,现需要使用oa系统用户来登录 spark。

由于公司组织架构有多层级,而openfire中多层级的组织架构 是用 :: 分隔的,

         如:        公司::部门一::部门一下一

                       公司::部门一::部门一下二

                       公司::部门二::部门二下一

公司层次可以为多个公司,就集团模式

所以暂时不整合部门分组,只整合用户

      本来打算直接将用户信息导入openfire用户表中,可是两边使用的加密方式不同。

            openfire使用的是org.jivesoftware.util.Blowfish。下面是解密

              

public String getEncryPWD(String noEncryPWD) {  
        String resultPWD = null;  
        String passWordKey = null; //passwordKey,从openfire数据库中读取  
        /* 
         *  下面这段是从ofProperty表中查询得到passwordKey的值。 
        OfProperty ofProperty = ofPropertyMapper.selectByPrimaryKey("passwordKey"); 
        if (ofProperty != null) { 
            passWordKey = ofProperty.getPropvalue(); 
        } */  
        Blowfish blowFish = new Blowfish(passWordKey); //根据加密key初始化  
        passWordKey = blowFish.encryptString(noEncryPWD); //加密  
        return resultPWD; //返回加密后的结果  
    }

 

我们系统使用的是SHA-256加密码 再加上base64

  

public static synchronized String encryptSha256(String inputStr) {
     try {
       MessageDigest md = MessageDigest.getInstance("SHA-256");
 
       byte[] digest = md.digest(inputStr.getBytes("UTF-8"));
 
       return new String(Base64.encodeBase64(digest));
     }
     catch (Exception e)
     {
     }
     return null;
   }

 没法解密。。所以导过去也没用

 

就使用openfire的扩展。

 

进入openfire管理控制台-服务器-服务管理器-系统属性
可以发现如下配置

provider.auth.className    org.jivesoftware.openfire.auth.DefaultAuthProvider      *用户验证
provider.group.className    org.jivesoftware.openfire.group.DefaultGroupProvider   *获取组相关数据
provider.user.className       org.jivesoftware.openfire.user.DefaultUserProvider  *获取用户相关数据
这些Provider是openfire默认自己管理用户组

但同时openfire还提供了支持JDBC相关的Provider,可以从其它的数据源获取用户/组数据
将上面三个属性分别修改为
org.jivesoftware.openfire.auth.JDBCAuthProvider
org.jivesoftware.openfire.group.JDBCGroupProvider
org.jivesoftware.openfire.user.JDBCUserProvider
然后,需要配置一下数据源,添加如下属性:
           jdbcProvider.driver  *数据源驱动
           jdbcProvider.connectionString  *连接字符串
对每一个JDBC Provider 需要配置相关的sql语句和属性(在系统属性里添加)
      jdbcAuthProvider.passwordSQL
            *获取用户密码的SQL
             *输入参数:登录名
              *输出列:密码
              *例:select password from app_user where username=?
      jdbcAuthProvider.passwordType
         *密码类型可以是:plain(文本),md5,sha1,sha256,sha512
 
       jdbcUserProvider.allUsersSQL
               *获取所有用户
               *输入参数:无
               *输出列:用户的登录名
               *例:select username from app_user

        jdbcUserProvider.userCountSQL
               *获取所有用户数量
               *输入参数:无
               *输出列:用户数量
               *例:select count(0) from app_user

         jdbcUserProvider.loadUserSQL
               *获取用户信息
               *输入参数:用户的登录名
               *输出列:姓名,email
               *例:select fullname,email from app_user where username=?

          jdbcUserProvider.emailField          *指定用户email的列名如:email
          jdbcUserProvider.nameField         *指定用户姓名的列名如:fullname  (上面loadUserSql查出来的fullname)
          jdbcUserProvider.usernameField  *指定用户登录名的列名如:username
 最后 还需要配置新的管理员用户
          admin.authorizedJIDs    *指定新数据源中的管理员用户注意是是完整JID(user@域名)   *例:admin@server.cn

 

 

配置好如上属性 重启openfire
使用admin.authorizedJIDs中的用户名登录openfire管理控制台
如果配置成功,进入openfire管理控制台-用户/组
就可以看到你数据源中的用户/组信息了
同时可以使用spark登录进行测试

        我的配置: 表app_user     主要字段: userId,username,password,fullname,email

INSERT INTO `ofproperty` VALUES ('admin.authorizedJIDs', 'admin@win-mas');
INSERT INTO `ofproperty` VALUES ('jdbcAuthProvider.passwordSQL', 'select password from app_user where username=?'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcAuthProvider.passwordType', 'sha256'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcProvider.connectionString', 'jdbc:mysql://localhost:3306/oa2_ljt?user=root&password=123456'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcProvider.driver', 'com.mysql.jdbc.Driver'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.allUsersSQL', 'select username from app_user'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.emailField', 'email'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.loadUserSQL', 'select fullname,email from app_user where username=?'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.nameField', 'fullname'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.userCountSQL', 'select count(0) from app_user'); -- 新增
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.usernameField', 'username'); -- 新增
INSERT INTO `ofproperty` VALUES ('provider.auth.className', 'org.jivesoftware.openfire.auth.JDBCAuthProvider'); -- 修改
INSERT INTO `ofproperty` VALUES ('provider.user.className', 'org.jivesoftware.openfire.user.JDBCUserProvider'); -- 修改
openfire jdbcAuthProvider中使用的sha256和我们系统中还不同,给openfire增加了个我上面使用的sha256加密方法,用户整合成功

 

 

         

 

 

分享到:
评论
1 楼 dying318 2013-12-13  
能不能告诉我jdbcUserProvider.usernameField 这个配置在什么情况下会用到?因为数据库里的username字段是经过处理的,SELECT replace(username,'@','at') as username FROM user,所有这里不确定是写username,还是replace(username,'@','at'),貌似我随便写都没有影响

相关推荐

    openfire扩展整合现有系统用户

    标题中的“openfire扩展整合现有系统用户”是指在Openfire这款开源即时通讯服务器上,将已有的用户系统(如企业内部的LDAP、AD等)与Openfire进行集成,实现用户身份验证和管理的一体化。Openfire是一款基于Java开发...

    [经典]Openfire整合现有用户

    在企业环境中,通常需要将Openfire与现有的用户管理系统进行整合,以便利用已有的用户数据,如LDAP(轻量级目录访问协议)或数据库中的用户信息。本文将详细介绍如何将Openfire与现有的用户资源进行整合,并扩展其...

    openfire3.10.0

    此外,它支持LDAP集成,便于与企业现有的用户认证系统对接。 **4. 聊天室与群组** Openfire允许创建公共或私有的聊天室,用户可以自由加入或邀请他人参与。群组功能使得消息广播和协作变得更加高效,可以设置群组...

    openfire 安装文件及详细安装教程

    Openfire还支持与其他XMPP服务器的互操作性,方便整合现有的IM系统。 此外,Openfire提供了丰富的API和插件系统,允许开发人员自定义功能,如监控、审计、集成第三方应用等。确保定期更新Openfire至最新版本,以...

    openfire安装配置部署提供Windows系统和linux系统安装配置以及管理员控制台API接入

    Openfire 还允许你自定义集成,比如与你现有的用户系统整合,确保用户认证的一致性。此外,Openfire 提供的 UserService 接口详细说明可以帮助开发者更好地理解和利用用户管理功能。 至于 Spark,这是一个与 ...

    openfire学习笔记

    - 当需要将Openfire与现有系统集成时,由于Openfire对用户数据的加密方式可能与你的系统不同,官方提供了一个名为User Service的插件。这个插件允许开发者通过HTTP请求来添加、编辑或删除Openfire用户。 - User ...

    openfire_3_9_3.tar.gz

    二次开发可能包括创建新的认证机制、实现自定义数据存储、整合其他系统或服务等。 4. **文件结构**:在解压"openfire_3_9_3.tar.gz"后,你会看到Openfire源代码的目录结构,包括源代码文件、资源文件、构建脚本、...

    如意通RTP企业版产品介绍

    2. **组织架构同步**:如意通RTP可以与企业现有的OA、ERP、CMS、CRM等系统进行同步,自动更新组织架构信息,确保联系人信息的准确性和时效性。 3. **消息广播**:支持企业内部的信息广播功能,不仅可以发送消息给...

    Jabber Messenger(Ext Jame)聊天插件.zip

    前者很可能是安装或使用插件的指南,详细介绍了如何将Jabber Messenger集成到现有项目中,包括配置步骤、依赖项管理以及可能遇到的问题和解决方法。而后者“132673638843236489”可能是一个JavaScript文件或者JSON...

    【整理】解刨AndroidPN消息推送.pdf

    在整合AndroidPN服务器到现有项目时,需要考虑与项目本身Spring环境的整合,有时候需要修改源代码以适应项目环境。由于AndroidPN服务器对jetty的使用是绑定的,若不使用jetty,也需要对源代码进行改造。开发者在使用...

Global site tag (gtag.js) - Google Analytics