openfire用户以及群组关系移植(与数据库中的关联)
2014-01-08 15:24
621 查看
openfire用户以及群组关系移植
时间 2013-08-01 12:02:00 BlogJava-专家区原文 http://www.blogjava.net/liuguly/archive/2013/08/01/402251.html
修改openfire的配置有两种途径:
1:修改安装目录/conf/openfire.xml。
2:直接修改openfire数据库的ofProperty表。
但是一般都建议修改openfire.xml文件,该文件如果配置正确,openfire重启后会自动将该文件里的属性值写入ofProperty表,同时会擦除自己添加的配置,只剩标签(除了默认配置)。如图:
对应ofProperty表配置:
官网提供的说明,自己在进行移植的时候有几点需要注意(以下都在openfire.xml里面配置)
1:官网提供的关于自己用户以及群所在的数据库配置:
< jive
>
< jdbcProvider
> <
driver >
com.mysql.jdbc.Driver </
driver >
< connectionString
> jdbc:mysql:
// localhost/dbname?user=username&password=secret</connectionString>
</ jdbcProvider
>
</ jive
>
里面的用户名和密码之间要加入&不能忘记,同时配置成功后,在ofProperty表里面会还原成&,不要在表里面修改为& 2:官网提供的关于用户登陆的配置以及admin的配置:
< jive
>
< admin
>
< authorizedUsernames
> joe, jane
</ authorizedUsernames
> </
admin >
< 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
>
注意点:这个时候网页登陆的用户已经不再是openfire自带的ofUser表里面的用户,而是user_account表的用户,该表就是自己的用户表,这里注意一点: 不要在select password后面再添加字段。 3:官网提供的用户配置:
< jive
>
< provider
> <
auth >
< className
> org.jivesoftware.openfire.auth.JDBCAuthProvider
</ className
> </
auth >
< user
> <
className >
org.jivesoftware.openfire.user.JDBCUserProvider
</ className
> </
user >
<
4000
/span></ 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
>
注意点:select后面的字段不要随意添加,比如<loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL> 我测试的时候去掉email,只查询name,结果用户总是无法登陆网页,查看了op源码在JDBCUserProvider类里有下面这一段:
1
public User loadUser(String username)
throws UserNotFoundException {
2
if (username.contains(
" @
" )) {
3
if (
! XMPPServer.getInstance().isLocal(
new JID(username))) {
4
throw
new UserNotFoundException(
" Cannot load user of remote server:
" +
username);
5 }
6 username
= username.substring(
0 ,username.lastIndexOf(
" @
" ));
7 }
8 Connection con
=
null ;
9 PreparedStatement pstmt
=
null ;
10 ResultSet rs
=
null ;
11
try {
12 con
= getConnection();
13 pstmt
= con.prepareStatement(loadUserSQL);
14 pstmt.setString(
1 , username);
15 rs
= pstmt.executeQuery();
16
if (
! rs.next()) {
17
throw
new UserNotFoundException();
18 }
19 String name
= rs.getString(
1 );
20 String email
= rs.getString(
2 );
21 22
return
new
User(username, name, email, new
Date(), new
Date());
23 }
24
catch (Exception e) {
25
throw
new UserNotFoundException(e);
26 }
27
finally {
28 DbConnectionManager.closeConnection(rs, pstmt, con);
29 }
30 }
代码走到20行的时候报错,因为查询sql不包括email,结果集里面并无email字段,所以rs.getString(2)的时候出错了。 所以根据经验不要轻易增减select后面的字段,如果没有select后面的字段,只有两种办法一个是修改op源码,一个是修改自己的业务表,增加op查询时候需要的字段。 4:官网提供的单用户以及群组配置:
< jive
>
< provider
> <
auth >
< className
> org.jivesoftware.openfire.auth.JDBCAuthProvider
</ className
> </
auth >
< user
> <
className >
org.jivesoftware.openfire.user.JDBCUserProvider
</ className
> </
user >
< group
> <
className >
org.jivesoftware.openfire.group.JDBCGroupProvider
</ className
> </
group >
</ provider
> <
jdbcAuthProvider >
<
passwordSQL >
SELECT password F
b4b3
ROM 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
> <
jdbcGroupProvider
> <
groupCountSQL >
SELECT count( *
) FROM myGroups </
groupCountSQL >
<
allGroupsSQL >
SELECT groupName FROM myGroups </
allGroupsSQL >
< userGroupsSQL
> SELECT groupName FROM myGroupUsers WHERE username
=?</ userGroupsSQL
> <
descriptionSQL >
SELECT groupDescription FROM myGroups WHERE groupName
=?</ descriptionSQL
> <
loadMembersSQL >
SELECT username FROM myGroupUsers WHERE groupName
=? AND isAdmin
= '
N ' </
loadMembersSQL >
<
loadAdminsSQL >
SELECT username FROM myGroupUsers WHERE groupName
=? AND isAdmin
= ' Y
' </
loadAdminsSQL >
</ jdbcGroupProvider
>
</ jive
>
注意点:不要轻易增删select后面的字段,根据自己的业务表进行修改即可。写sql的时候一定要注意是否正确,只要有一点出错网页就无法显示出你自己的用户以及群组。 当出现不明错误的时候,进入logs目录查看error.log进行调整测试。
相关文章推荐
- Oracle-数据库、表空间、用户、表之间关系以及创建
- ArcSDE地理数据库跨用户以及跨数据库表关联研究 支持
- ArcSDE地理数据库跨用户以及跨数据库表关联研究
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- Oracle - 数据库的实例、表空间、用户、表之间关系
- Oracle - 数据库的实例、表空间、用户、表之间关系
- Mybatis学习笔记:(二) java中的实体(对象、List、Set)关系怎样与数据库关联映射
- 数据库管理系统、数据库以及SQL语言之间的关系
- 数据库操作-增删改查-多对多关系以及一对多(外键)关系
- 使用asp.net2.0的Membership服务与自己写的用户数据库关联
- XMPP 之Openfire的用户数据库整合
- MVC3学习第九章 葵花点穴手之势如闪电----MVC3下实现用户信息的查询以及通过实体模型建立商品和类别的主外键关系
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系
- 关系数据库SQL之可编程性函数(用户自定义函数)
- 外键约束 以及 数据库中实体的对应关系(1==1,1==n,n==n)
- 用户sa登入失败,该用户与可信SQL server连接无关联 错误18452(远程数据库访问)
- java.html+css.js.数据库开发用户注册以及用户登录
- linux 下 mongo 安装和配置用户以及配置数据库
- Scrapy爬取知乎用户信息以及人际拓扑关系