前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Openfire用户以及群组关系移植

Openfire用户以及群组关系移植

作者头像
星哥玩云
发布2022-06-28 17:25:51
5230
发布2022-06-28 17:25:51
举报
文章被收录于专栏:开源部署

修改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&amp;password=secret</connectionString> </jdbcProvider> </jive>

代码语言:javascript
复制
里面的用户名和密码之间要加入&amp;不能忘记,同时配置成功后,在ofProperty表里面会还原成&,不要在表里面修改为&amp;
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>

代码语言:javascript
复制
注意点:这个时候网页登陆的用户已经不再是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> </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>

代码语言:javascript
复制
注意点: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 thrownew 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 thrownew UserNotFoundException(); 18 } 19 String name = rs.getString(1); 20 String email = rs.getString(2); 21 22 returnnew User(username, name, email, new Date(), new Date()); 23 } 24 catch (Exception e) { 25 thrownew UserNotFoundException(e); 26 } 27 finally { 28 DbConnectionManager.closeConnection(rs, pstmt, con); 29 } 30 }

代码语言:javascript
复制
代码走到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 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> <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>

代码语言:javascript
复制
注意点:不要轻易增删select后面的字段,根据自己的业务表进行修改即可。sql不要写错,否则就无法显示出自己的用户以及群组。
当出现不明错误的时候,进入logs目录查看error.log进行调整测试。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档