当前位置:首页 > 开发 > 互联网 > 正文

openfire集成现有数据库,以及在源码中的实现

发表于: 2012-08-08   作者:chungang   来源:转载   浏览次数:
摘要: 一、集成数据库的设置     在使用openfire的过程中,如果需要用到已有的数据库里面的用户来登录的时候,需要再openfire自己的数据库中ofProperty表里面新增、以及修改一些字段,修改之后如下所示: admin.authorizedJIDs   1048622@192.168.1.1 jdbcAuthProvider.passwor
一、集成数据库的设置
    在使用openfire的过程中,如果需要用到已有的数据库里面的用户来登录的时候,需要再openfire自己的数据库中ofProperty表里面新增、以及修改一些字段,修改之后如下所示:

admin.authorizedJIDs   1048622@192.168.1.1
jdbcAuthProvider.passwordSQL select password from user where uid=?
jdbcAuthProvider.passwordType md5
jdbcProvider.connectionString  jdbc:mysql://192.168.1.2:3306/app?user=work&password=w2q5l0u1
jdbcProvider.driver com.mysql.jdbc.Driver
jdbcUserProvider.allUsersSQL select uid from user
jdbcUserProvider.emailField email
jdbcUserProvider.loadUserSQL select name,email from user where uid=?
jdbcUserProvider.nameField name
jdbcUserProvider.userCountSQL select count(*) from user
jdbcUserProvider.usernameField name
passwordKey EXOrfCVaNU9sq9X
provider.admin.className org.jivesoftware.openfire.admin.DefaultAdminProvider
provider.auth.className org.jivesoftware.openfire.auth.JDBCAuthProvider
provider.group.className org.jivesoftware.openfire.group.DefaultGroupProvider
provider.lockout.className org.jivesoftware.openfire.lockout.DefaultLockOutProvider
provider.securityAudit.className org.jivesoftware.openfire.security.DefaultSecurityAuditProvider
provider.user.className org.jivesoftware.openfire.user.JDBCUserProvider
provider.vcard.className org.jivesoftware.openfire.vcard.DefaultVCardProvider
register.inband true
register.password true
update.lastCheck 1344306789871
xmpp.auth.anonymous true
xmpp.domain 192.168.1.1
xmpp.session.conflict-limit 0
xmpp.socket.ssl.active true
需要说明的是xmpp.domain 字段可以填写openfire所在服务器的域名或者IP, connectionString是需要集成的数据库地址,loadUserSQL里面的uid是你需要通过它来登录的,还有,这些Sql里面的字段一定要保证需要集成的数据库里面是存在的。

二、上面的设置如何在程序中起作用

程序里有AuthFactory和UserManger分别用来处理provider.auth.className和provider.user.className。

AuthFactory类里有一个私有属性
private static AuthProvider authProvider = null;

JDBCAuthProvider继承自这个接口AuthProvider ,AuthFactory里面有个初始化AuthProvider的方法:

private static void initProvider() {
       String className = JiveGlobals.getProperty("provider.auth.className",
                "org.jivesoftware.openfire.auth.DefaultAuthProvider");
        // Check if we need to reset the auth provider class
        if (authProvider == null || !className.equals(authProvider.getClass().getName())) {
            try {
                Class c = ClassUtils.forName(className);
                authProvider = (AuthProvider)c.newInstance();
            }
}
该方法将authProvider 设置为ofProperty中provider.auth.className字段设置的值。
UserManger对JDBCUserProvider进行了类似的处理。


下面在源码里面查看org.jivesoftware.openfire.auth.JDBCAuthProvider 和org.jivesoftware.openfire.user.JDBCUserProvider这两个类
以JDBCAuthProvider为例,JDBCAuthProvider有几个私有的属性:
    private String connectionString;
  private String passwordSQL;
  private PasswordType passwordType;
在对JDBCAuthProvider进行初始化的时候,对这几个属性进行了如下的赋值:
connectionString = JiveGlobals.getProperty("jdbcProvider.connectionString");
passwordSQL= JiveGlobals.getProperty("jdbcAuthProvider.passwordSQL");
passwordType = PasswordType.plain;
try {
passwordType = PasswordType.valueOf(
JiveGlobals.getProperty("jdbcAuthProvider.passwordType", "plain"));
}
其中JiveGlobals是专门用来处理数据库的类。
因为connectionString被赋值为你在ofProperty里面所填写的值,所以该类在调用获取连接的方法getConnection()中获取了指向待集成数据库的地址。
return DriverManager.getConnection(connectionString);

在调用获取密码的方法getPasswordValue()的时候,对PreparedStatement的设置的内容就是passwordSQL,如下:

private String getPasswordValue(String username) {
        ...
        try {
            con = getConnection();
            pstmt = con.prepareStatement(passwordSQL);
            pstmt.setString(1, username);

             ...      
             }
      
        return password;
  }
其他字段都是以这种方式在程序中起的作用。

openfire集成现有数据库,以及在源码中的实现

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
这里忽略安装以及配置Openfire数据库的过程,直接讲集成过程。 官方文档中提到的集成方法是在openfi
参考:http://redhacker.iteye.com/blog/1919329 Openfire源码的编译请查看另一篇文章:Ubuntu12.04
0问题场景 假如我们有一个网站并且已经有了上百万的注册用户,现在要集成一个IM即时聊天功能,假如
最近接触xmpp协议和openfire服务器,文档貌似不怎么丰富,中文资料就更加 屈指可数了。这么多中文博
一开始编译openfire对于第一次接触的朋友可能会有一头雾水。网上很多地方讲得比较乱,现在我吧我的
1、openfire官网介绍的构建方法:http://igniterealtime.org/builds/openfire/docs/latest/document
在现有代码中通过async/await实现并行 一项新技术或者一个新特性,只有你用它解决实际问题后,才能
最近的task是将储存在类似于链表中的workflow转换成图。 图的信息存在于文件当中,格式是"前置事件",
关于数据库有三个地方需要注意: 1.plugin.xml数据库及其版本的相关配置 2.系统自带表 ofVersion表
关于数据库有三个地方需要注意: 1.plugin.xml数据库及其版本的相关配置 2.系统自带表 ofVersion表
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号