本文绝大部分内容均参照Openfire官方文档:Custom Database Integration Guide,地址如下:
http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/db-integration-guide.html
Openfire使用外部数据库只需要在openfire/src/con/openfire.xml配置文件中进行相应的配置,不需要手动编码。配置分为两个阶段:1、进行openfire.xml的配置;2、登录到web管理后台进行手动配置;
阶段一:进行Openfire.xml的配置
1、外部数据库集成配置
配置驱动和连接字符串:
<jive> ... <jdbcProvider> <driver>com.mysql.jdbc.Driver</driver> <connectionString>jdbc:mysql://localhost/dbname?user=username&password=secret</connectionString> </jdbcProvider> ... </jive>
<jive> ... <jdbcProvider> <driver>com.mysql.jdbc.Driver</driver> <connectionString>jdbc:mysql://localhost/openfirev1?username=root</connectionString> </jdbcProvider> ... </jive>
我的数据库名叫openfirev1,mysql的用户名是root,没有设密码所以密码不用写。
2、认证集成配置
认证配置需要配置以下标签:
- provider.auth.className--设置为org.jivesoftware.openfire.auth.JDBCAuthProvider
- jdbcAuthProvider.passwordSQL--该SQL语句用于查询一个用户密码。SQL语句必须包含一个‘?’,它在执行时将被动态地替换
- jdbcAuthProvider.passwordType--密码的类型。可用的有:plain(不加密)、md5、sha1、sha256、sh512
<jive> ... <provider> <auth> <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className> </auth> </provider> <jdbcAuthProvider> <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL> <passwordType>plain</passwordType> </jdbcAuthProvider> ... </jive>
<jive> ... <provider> <auth> <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className> </auth> </provider> <jdbAuthProvider> <passwordSQL>SELECT password FROM ofuser WHERE username=?</passwordSQL> <passwordType>plain</passwordType> ... </jive>
3、用户集成配置
用户集成是可选的,Openfire可用从外部数据库载入用户。如果你想使用用户集成,则必须先进行认证集成配置(如配置2)。用户集成配置需配置已下标签:
- provider.user.className--设为org.jivesoftware.openfire.user.JDBCUserProvider
- jdbcUserProvider.loadUserSQL--该SQL语句用于载入给定用户名的姓名和邮件地址信息。该SQL语句应该包括一个‘?’,它在执行时将被动态地替换
- jdbcUserProvider.userCountSQL--用于计算用户数
- jdbcUserProvider.allUsersSQL--用于载入数据库中的所有用户
- jdbcUserProvider.searchSQL--用于在数据库中搜索符合条件的用户,是不完整的SQL语句,缺少where后面的内容,它在执行时将被动态地补全,如果不填则不能进行搜索
- usernameField--用户名字段,用于搜索
- nameField--昵称字段,用于搜索
- emailField--邮箱字段,用于搜索
<jive> ... <provider> <user> <className>org.jivesoftware.openfire.user.JDBCUserProvider</className> </user> </provider> <jdbcAuthProvider> <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL> <passwordType>plain</passwordType> </jdbcAuthProvider> <jdbcUserProvider> <loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL> <userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL> <allUsersSQL>SELECT username FROM myUser</allUsersSQL> <searchSQL>SELECT username FROM myUser WHERE</searchSQL> <usernameField>username</usernameField> <nameField>name</nameField> <emailField>email</emailField> </jdbcUserProvider> ... </jive>
<jive> ... <provider> <user> <className>org.jivesoftware.openfire.user.JDBCUserProvider</className> </user> </provider> <jdbcUserProvoder> <loadUserSQL>SELECT name,email FROM ofuser WHERE username=?</loadUserSQL> <userCountSQL>SELECT COUNT(*) FROM ofuser</userCountSQL> <allUserSQL>SELECT username FROM ofuser</allUserSQL> <searchSQL>SELECT username FROM ofuser WHERE</searchSQL> <usernameField>username</usernameField> <nameField>name</nameField> <emailField>email</emailField> </jdbcUserProvoder> ... </jive>
4/openfire.xml文件配置完成!所有代码整合:
<jive> <adminConsole> <!-- Disable either port by setting the value to -1 --> <port>9090</port> <securePort>9091</securePort> </adminConsole> <locale>en</locale> <!-- Network settings. By default, Openfire will bind to all network interfaces. Alternatively, you can specify a specific network interfaces that the server will listen on. For example, 127.0.0.1. This setting is generally only useful on multi-homed servers. --> <jdbcProvider> <driver>com.mysql.jdbc.Driver</driver> <connectionString>jdbc:mysql://localhost/openfirev1?username=root</connectionString> </jdbcProvider> <provider> <auth> <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className> </auth> <user> <className>org.jivesoftware.openfire.user.JDBCUserProvider</className> </user> </provider> <jdbAuthProvider> <passwordSQL>SELECT password FROM ofuser WHERE username=?</passwordSQL> <passwordType>plain</passwordType> </jdbAuthProvider> <jdbcUserProvider> <loadUserSQL>SELECT name,email FROM ofuser WHERE username=?</loadUserSQL> <userCountSQL>SELECT COUNT(*) FROM ofuser</userCountSQL> <allUserSQL>SELECT username FROM ofuser</allUserSQL> <searchSQL>SELECT username FROM ofuser WHERE</searchSQL> <usernameField>username</usernameField> <nameField>name</nameField> <emailField>email</emailField> </jdbcUserProvoder> </jive>
阶段二:登录http:127.0.0.1:9090进行后台管理的初始化设置。
首先在MySQL中建立数据库openfirev1。
此时,数据库中已经生成了所有表!
目前为止已经可以使用数据库中的用户了。现在我们测试一下~往数据库中的ofuser表中添加一条记录:用户名:tt,密码:tt,直接从数据库中添加和从控制台添加都可以。如下图就是从控制台添加:
然后从客户端spark登录:
登录成功!