zoukankan      html  css  js  c++  java
  • OpenFire源码学习之二十八:与其他系统的用户整合

    与三方系统整合。Openfire提供了一套不错的解决方案。其实openfire的用户插件也做http方式的用户数据同步。关于openfire的用户整合,本人也不是十分赞同(这仅仅只是在我们自己的项目下)。我们的办法是做数据共享池。这个解决方案可以用到redis

    下面是opnfire的 解决方案

    openfire可以非常方便的整合现有系统用户。 进入openfire管理控制台-服务器-服务管理器-系统属性 可以发现如下配置 

    以下Provideropenfire默认自己管理用户组

    属性名 

    属性值

    描述

    provider.auth.className 

    org.jivesoftware.openfire.auth.DefaultAuthProvider 

    用户验证 

    provider.group.className

    org.jivesoftware.openfire.group.DefaultGroupProvider 

    获取组相关数据 

    provider.user.className 

    org.jivesoftware.openfire.user.DefaultUserProvider 

    获取用户相关数据 

    除了of自己本身的属性外,另外为了支持其他数据的整合openfire还提供了支持JDBC相关的Provider,可以从其它的数据源获取用户/组数据 。配置非常简单只需要将上面三个属性分别修改为 

    org.jivesoftware.openfire.auth.JDBCAuthProvider 

    org.jivesoftware.openfire.group.JDBCGroupProvider 

    org.jivesoftware.openfire.user.JDBCUserProvider 


    然后,需要配置以下数据源,添加如下属性 

    JDBCAuthProvider

    属性名

    说明

    输入值

    输出列

    属性值

    jdbcAuthProvider.passwordSQL

    获取用户密码的SQL

    登录名

    密码

    select pwd from users where uid=?

    jdbcAuthProvider.passwordType

    密码类型

    plain(文本) | md5 | sha1 | sha256 |sha512,如果密码加密不为前面几种,就需要自己提供一个AuthProvide,如果没有设置,默认为plain

    JDBCUserProvider

    属性名

    说明

    输入值

    输出列

    属性值

    jdbcUserProvider.allUsersSQL

    获取所有用户

    用户的uid

    select uid from users

    jdbcUserProvider.loadUserSQL

    获取用户信息

    用户uid

    用户名,email

    select name,email from users where uid=?

    jdbcUserProvider.userCountSQL

    获取用户数量

    用户数量

    select count(*) from users

    jdbcUserProvider.usernameField

    指定用户登录名的列名

    uid

    jdbcUserProvider.nameField

    指定用户名称的列名

    name

    jdbcUserProvider.emailField

    指定用户email的列名

    email

    JDBCGroupProvider

    属性名

    说明

    输入值

    输出列

    属性值

    jdbcGroupProvider.allGroupsSQL

    获取所有组的SQL

    组名

    select groupName from groups

    jdbcGroupProvider.descriptionSQL

    获取组描述

    组名

    组描述

    select description from groups where groupName=?

    jdbcGroupProvider.groupCountSQL

    获取组的数量

    组的数量

    select count(*) from groups

    jdbcGroupProvider.loadAdminsSQL

    获取组的管理员

    组名

    组管理员

    select uid from groupusers where groupName=? and admin=1

    jdbcGroupProvider.loadMembersSQL

    获取组的成员

    组名

    组成员uid

    select uid from groupusers where groupName=? and admin=0

    jdbcGroupProvider.userGroupsSQL

    获取成员的组

    成员uid

    成员所属组名

    select groupName from groupusers where uid=?

    注意:其中获取组的管理员和组的成员中的判断要根据相应系统修改,我这边假设admin值为1时是管理员,值为0时是成员

    最后,配置新的管理员用户(应该在users表中添加一个用户作为管理员)

    属性名

    说明

    属性值

    admin.authorizedJIDs

    指定新数据源中的管理员用户,注意是是完整JID(user@域名)

    admin@1 92.168.2.104

    配置好后,重启Openfire

    使用admin.authorizedJIDs中的用户名登录Openfire管理控制台(admin.authorizedJIDs配置为admin@192.168.0.46,则用户名为admin)如果配置成功,进入Openfire管理控制台-》用户/就可以看到你数据源中的用户/组信息了。

    在修改添加系统属性的过程中,若无法登录Openfire管理控制台,可直接修改Openfire数据库中的ofproperty表。

    除了以上在控制台修改之外,也可以直接操作ofProperty数据库表

    insert into ofproperty( name, propValue) values( 'admin.authorizedJIDs' , 'admin@192.168.2.104');                                             
    insert into ofproperty( name, propValue) values( 'jdbcAuthProvider.passwordSQL','select pwd from users where
      name=?');  
    insert into ofproperty( name, propValue) values( 'jdbcAuthProvider.passwordType' , 'plain');  
    Insert into ofproperty(name,propValue)values('jdbcProvider.connectionString' 'jdbc:jtds:sqlserver://192.169.1.120
      :1433/test_openfire_jcdb;appName=jive;user=sa;password=hytest');  
    insert into ofproperty( name, propValue) values( 'jdbcProvider.driver' , 'net.sourceforge.jtds.jdbc.Driver' );  
    insert into ofproperty( name, propValue) values( 'jdbcUserProvider.allUsersSQL', 'select name from users' );  
    insert into ofproperty( name, propValue) values( 'jdbcUserProvider.emailField' ,'email');  
    insert into ofproperty( name, propValue) values('jdbcUserProvider.loadUserSQL' ,'select * from users where uid=?');  
    insert into ofproperty( name, propValue) values( 'jdbcUserProvider.nameField', 'name');  
    insert into ofproperty( name, propValue) values('jdbcUserProvider.userCountSQL', 'select count(name) from
       users');  
    insert into ofproperty( name, propValue) values( 'jdbcUserProvider.usernameField' , 'name' );  
    UPDATE ofproperty SET propValue ='org.jivesoftware.openfire.auth.JDBCAuthProvider' WHERE 
      NAME='provider.auth.className';  
    UPDATE ofproperty SET propValue='org.jivesoftware.openfire.user.JDBCUserProvider' WHERE 
      NAME='provider.user.className';  
    UPDATE ofproperty SET propValue='192.168.2.104' WHERE NAME='xmpp.domain'; 

  • 相关阅读:
    虚拟机的Linux 安装 若干问题(一)
    理解JavaScript的闭包
    javascript里面的引用类型和值类型
    javascript导入自定义模块
    简单了解下CAP定理与BASE定理
    背包问题之完全背包
    背包问题之多重背包
    背包问题之0-1背包
    搜索算法初步总结
    谈一谈“回溯法“
  • 原文地址:https://www.cnblogs.com/huwf/p/4273340.html
Copyright © 2011-2022 走看看