`
chungang
  • 浏览: 31965 次
社区版块
存档分类
最新评论

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

阅读更多
一、集成数据库的设置
    在使用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.zip

    可支持插件开发,内部集成了openfire所有会缺失的包,包含大部分插件源码,同时集成了本人修改的广播给在线用户插件,已经在本地跑过,内部自带数据库,如果需要登录可使用admin/huored进入管理页面

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    java开源包8

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包3

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包4

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包11

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包2

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包6

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包5

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包10

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包7

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包9

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包101

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    Java资源包01

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics