`
hetylei
  • 浏览: 140574 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

xmpp with openfire之三 openfire扩展小试 整合现有系统用户

阅读更多
openfire服务器配置,先跳过介绍,我想在文章里用到的时候再插入一些介绍。

openfire扩展小试 整合现有系统用户

如果我想使用现有系统的用户/组(部门),而不想使用openfire再去管理一套用户/组,用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
jdbcAuthProvider.passwordSQL
*获取用户密码的SQL
*输入参数:登录名
*输入列:密码
*例:SELECT pwd FROM user WHERE name=?
jdbcAuthProvider.passwordType
*密码类型可以是:plain(文本),md5,sha1
*如果你的密码加密不为以上三种 就需要自己提供一个AuthProvider,在下一章会专门介绍


JDBCGroupProvider
jdbcGroupProvider.allGroupsSQL
*获取所有组的SQL
*输入参数:无
*输出列:组的KEY
*例:SELECT sn FROM department

jdbcGroupProvider.descriptionSQL
*获取组的名称(描述)
*输入参数:组记录的KEY
*输出列:组的名称(描述)
*例:SELECT name FROM department where sn=?

jdbcGroupProvider.groupCountSQL
*获取组的数量
*输入参数:组的KEY
*输出列:组的数量
*例:SELECT count(sn) FROM department

jdbcGroupProvider.loadAdminsSQL
*获取组的管理员
*输入参数:组记录的KEY
*输出列:组管理员的KEY
*例:SELECT admin FROM department where sn=?

jdbcGroupProvider.loadMembersSQL
*获取组的成员
*输入参数:组的KEY
*输出列:组成员的KEY(集合)
*例:SELECT usersn FROM department_user where departmentsn=?

jdbcGroupProvider.userGroupsSQL
*获取成员的组
*输入参数:成员的KEY
*输出列:成员所性组的KEY
*例:SELECT departmentsn FROM department_user where usersn=?



JDBCUserProvider
jdbcUserProvider.allUsersSQL
*获取所有用户
*输入参数:无
*输出列:用户的KEY
*例:SELECT sn from user

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

jdbcUserProvider.loadUserSQL
*获取用户信息
*输入参数:用户的KEY
*输出列:登录名,名称,email(至少应该这三列,下面要用到)
*例:SELECT loginname,name,email from user where sn =?

jdbcUserProvider.emailField
*指定用户email的列名如:email
jdbcUserProvider.nameField
*指定用户名称的列名如:name
jdbcUserProvider.usernameField
*指定用户登录名的列名如:loginname


最后 还需要配置新的管理员用户
admin.authorizedJIDs
*指定新数据源中的管理员用户注意是是完整JID(user@域名)
*例:admin@server.cn

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


此外,如果在调试过程中出现问题 无法登录openfire管理控制台
可以直接修改openfire数据库中的 OFPROPERTY表

分享到:
评论
5 楼 lookdd1 2010-04-01  
hetylei 写道
lookdd1 写道
请问,整合现有数据库为oracle的时候如何写这个jdbcProvider.connectionString啊?用户名和密码写在什么地方?jdbc:oracle:thin:@[HOST]:1521:[INSTANCE]?name=?&password=?


我直接加了三个属性  囧


/** 
     * 初始化 
     * 比JDBCAuthProvider多支持 
     * [b]JiveGlobals.migrateProperty("jdbcProvider.url"); 
        JiveGlobals.migrateProperty("jdbcProvider.user"); 
        JiveGlobals.migrateProperty("jdbcProvider.password");[/b] 
     */  
    public BfmpAuthProvider() {  
        // Convert XML based provider setup to Database based  
        JiveGlobals.migrateProperty("jdbcProvider.driver");  
        JiveGlobals.migrateProperty("jdbcProvider.url");  
        JiveGlobals.migrateProperty("jdbcProvider.user");  
        JiveGlobals.migrateProperty("jdbcProvider.password");  
  
        JiveGlobals.migrateProperty("jdbcAuthProvider.passwordSQL");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.passwordType");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.setPasswordSQL");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.allowUpdate");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.passwordType");  
  
        // Load the JDBC driver and connection string.  
        String jdbcDriver = JiveGlobals.getProperty("jdbcProvider.driver");  
        try {  
            Class.forName(jdbcDriver).newInstance();  
        }  
        catch (Exception e) {  
            Log.error("Unable to load JDBC driver: " + jdbcDriver, e);  
            return;  
        }  
        [b]connectionString = JiveGlobals.getProperty("jdbcProvider.url");  
        user = JiveGlobals.getProperty("jdbcProvider.user");  
        password = JiveGlobals.getProperty("jdbcProvider.password");[/b]  
  
        // Load SQL statements.  
        passwordSQL = JiveGlobals.getProperty("jdbcAuthProvider.passwordSQL");  
        setPasswordSQL = JiveGlobals.getProperty("jdbcAuthProvider.setPasswordSQL");  
  
        allowUpdate = JiveGlobals.getBooleanProperty("jdbcAuthProvider.allowUpdate",false);  
  
        passwordType = PasswordType.plain;  
        try {  
            passwordType = PasswordType.valueOf(  
                    JiveGlobals.getProperty("jdbcAuthProvider.passwordType", "plain"));  
            Log.error("PasswordType:"+ passwordType);  
        }  
        catch (IllegalArgumentException iae) {  
            Log.error(iae);  
        }  
    }  


晕死,原来不光我不知道JDBC连接Oracle的连接描述符还有   jdbc:oracle:thin:username/password@机器名:1521:[instance] 这种写法啊。。呵呵。还有一个就是机器名改成IP也不行,为这事搞了一天。。多谢楼主的文章和楼主的回复!
4 楼 hetylei 2010-03-30  
lookdd1 写道
请问,整合现有数据库为oracle的时候如何写这个jdbcProvider.connectionString啊?用户名和密码写在什么地方?jdbc:oracle:thin:@[HOST]:1521:[INSTANCE]?name=?&password=?


我直接加了三个属性  囧


/** 
     * 初始化 
     * 比JDBCAuthProvider多支持 
     * [b]JiveGlobals.migrateProperty("jdbcProvider.url"); 
        JiveGlobals.migrateProperty("jdbcProvider.user"); 
        JiveGlobals.migrateProperty("jdbcProvider.password");[/b] 
     */  
    public BfmpAuthProvider() {  
        // Convert XML based provider setup to Database based  
        JiveGlobals.migrateProperty("jdbcProvider.driver");  
        JiveGlobals.migrateProperty("jdbcProvider.url");  
        JiveGlobals.migrateProperty("jdbcProvider.user");  
        JiveGlobals.migrateProperty("jdbcProvider.password");  
  
        JiveGlobals.migrateProperty("jdbcAuthProvider.passwordSQL");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.passwordType");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.setPasswordSQL");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.allowUpdate");  
        JiveGlobals.migrateProperty("jdbcAuthProvider.passwordType");  
  
        // Load the JDBC driver and connection string.  
        String jdbcDriver = JiveGlobals.getProperty("jdbcProvider.driver");  
        try {  
            Class.forName(jdbcDriver).newInstance();  
        }  
        catch (Exception e) {  
            Log.error("Unable to load JDBC driver: " + jdbcDriver, e);  
            return;  
        }  
        [b]connectionString = JiveGlobals.getProperty("jdbcProvider.url");  
        user = JiveGlobals.getProperty("jdbcProvider.user");  
        password = JiveGlobals.getProperty("jdbcProvider.password");[/b]  
  
        // Load SQL statements.  
        passwordSQL = JiveGlobals.getProperty("jdbcAuthProvider.passwordSQL");  
        setPasswordSQL = JiveGlobals.getProperty("jdbcAuthProvider.setPasswordSQL");  
  
        allowUpdate = JiveGlobals.getBooleanProperty("jdbcAuthProvider.allowUpdate",false);  
  
        passwordType = PasswordType.plain;  
        try {  
            passwordType = PasswordType.valueOf(  
                    JiveGlobals.getProperty("jdbcAuthProvider.passwordType", "plain"));  
            Log.error("PasswordType:"+ passwordType);  
        }  
        catch (IllegalArgumentException iae) {  
            Log.error(iae);  
        }  
    }  

3 楼 lookdd1 2010-03-30  
请问,整合现有数据库为oracle的时候如何写这个jdbcProvider.connectionString啊?用户名和密码写在什么地方?jdbc:oracle:thin:@[HOST]:1521:[INSTANCE]?name=?&password=?
2 楼 hetylei 2009-06-30  
key232323 写道
请问一个问题,当我修改
org.jivesoftware.openfire.user.JDBCUserProvider
org.jivesoftware.openfire.auth.JDBCAuthProvider

后,admin就无法登陆了

出现UnauthorizedException
结果调用了
LoginLimitManager.recordFailedAttempt

一直处于登陆页面
请问为什么出现此原因?

最后 还需要配置新的管理员用户
admin.authorizedJIDs
*指定新数据源中的管理员用户注意是是完整JID(user@域名)
*例:admin@server.cn


以上设置登录用户名是admin
1 楼 key232323 2009-06-27  
请问一个问题,当我修改
org.jivesoftware.openfire.user.JDBCUserProvider
org.jivesoftware.openfire.auth.JDBCAuthProvider

后,admin就无法登陆了

出现UnauthorizedException
结果调用了
LoginLimitManager.recordFailedAttempt

一直处于登陆页面
请问为什么出现此原因?

相关推荐

    Xmpp和OpenFire实例

    先说一下为什么要写这篇博客,是因为本人在周末在研究XMPP和OpenFire,从网上下载了个Demo,但跑不起来,花了很长时间,经改造后,跑起来了,写个篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接运行,少走...

    openfire扩展整合现有系统用户

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

    多人在线聊天系统源码 xmpp+openfire

    本项目采用XMPP(Extensible Messaging and Presence Protocol)协议和Openfire服务器,结合Android客户端,实现了一个功能丰富的多人在线聊天系统。下面将详细介绍XMPP、Openfire以及Android在构建此类系统中的关键...

    [经典]Openfire整合现有用户

    1. **Openfire与现有用户的整合** - **LDAP集成**:Openfire支持与LDAP服务器进行集成,如Active Directory或OpenLDAP。通过配置Openfire的服务器设置,可以连接到 LDAP 服务器并验证用户身份。这允许用户使用他们...

    xmpp,openfire搭建ppt

    Openfire是一款开源的XMPP服务器,它基于Java开发,可以在多种操作系统上运行,如Windows、Linux、Mac OS等。Openfire提供了丰富的管理功能,包括用户管理、群组管理、安全设置等,同时支持SSL/TLS加密,保证了通信...

    XMPP开发Openfire详细介绍

    Openfire的强大之处在于其高度可扩展的插件系统。通过安装插件,可以极大地增强服务器的功能。 ##### 3.1 KrakenIMGateway插件 - **功能**:支持MSNS、QQ等第三方即时通讯工具的登录。 - **配置**:通过插件配置...

Global site tag (gtag.js) - Google Analytics