openfire使用自定义用户表

openfire使用自定义用户表 - nomousewch的专栏 - 博客频道 - CSDN.NET

在最近的项目中使用openfire服务器实现消息推送功能,如果使用openfire自带的用户表,需要维护两张用户表,不是很方便,如果openfire能够直接使用现有系统的用户表就方便多了,而事实上openfire已经为我们考虑到了这一点,我们只需要做一些相关配置就可以了。

  • 原理

研究了下openfire的源码,发现实现此点的关键在于data provider的应用,简单来说,就是在程序中需要用到持久化数据(比如用户名、部门名这些,可以储存在数据库中,也可以储存在xml文件或者ldap目录服务中)的地方,用一个Provider作为获取数据的统一接口,针对不同的数据源(可以是数据库的不同表,也可以是nosql、xml等其它数据源)进行相应的实现,比如其中AuthProvider接口(负责用户验证),它有两个不同的实现DefaultAuthProvider和JDBCAuthProvider
,前者是默认的openfire自带表,而后者则是根据我们自定义的数据表,我们将默认的DefaultAuthProvider配置为JDBCAuthProvider ,并添加一些配置文本,就可以进行数据源的切换了。

  • 具体配置

进入openfire管理控制台-服务器-服务管理器-系统属性

增加以下键值对,或者在数据库中直接更新数据表

[sql] view plaincopyprint?

  1. --设置JDBC连接方式
  2. insert into OFPROPERTY (NAME, PROPVALUE)
  3. values (‘jdbcProvider.connectionString‘,
  4. ‘jdbc:oracle:thin:@10.35.246.178:1521:orcl‘);
  5. insert into OFPROPERTY (NAME, PROPVALUE)
  6. values (‘jdbcProvider.driver‘, ‘oracle.jdbc.driver.OracleDriver‘);
  7. --设置管理员账号
  8. insert into OFPROPERTY (NAME, PROPVALUE)
  9. values (‘admin.authorizedJIDs‘, ‘[email protected]‘);
  10. --自定义用户认证
  11. insert into OFPROPERTY (NAME, PROPVALUE)
  12. values (‘jdbcAuthProvider.useConnectionProvider‘, ‘true‘);
  13. insert into OFPROPERTY (NAME, PROPVALUE)
  14. values (‘jdbcAuthProvider.passwordSQL‘, ‘select ‘‘123456‘‘ as pwd from
  15. t_sys_user t where t.code=?‘);
  16. insert into OFPROPERTY (NAME, PROPVALUE)
  17. values (‘jdbcAuthProvider.passwordType‘, ‘plain‘);
  18. --自定义用户管理
  19. insert into OFPROPERTY (NAME, PROPVALUE)
  20. values (‘jdbcUserProvider.allUsersSQL‘, ‘select code from t_sys_user
  21. t‘);
  22. insert into OFPROPERTY (NAME, PROPVALUE)
  23. values (‘jdbcUserProvider.nameField‘, ‘name‘);
  24. insert into OFPROPERTY (NAME, PROPVALUE)
  25. values (‘jdbcUserProvider.searchSQL‘, ‘select code from t_sys_user t
  26. where code=?‘);
  27. insert into OFPROPERTY (NAME, PROPVALUE)
  28. values (‘jdbcUserProvider.useConnectionProvider‘, ‘true‘);
  29. insert into OFPROPERTY (NAME, PROPVALUE)
  30. values (‘jdbcUserProvider.emailField‘, ‘email‘);
  31. insert into OFPROPERTY (NAME, PROPVALUE)
  32. values (‘jdbcUserProvider.userCountSQL‘, ‘select count(*) from
  33. t_sys_user t‘);
  34. insert into OFPROPERTY (NAME, PROPVALUE)
  35. values (‘jdbcUserProvider.loadUserSQL‘, ‘select t.name,t.email,t.code
  36. from t_sys_user t where t.code=?‘);
  37. insert into OFPROPERTY (NAME, PROPVALUE)
  38. values (‘jdbcUserProvider.usernameField‘, ‘code‘);
  39. --使用不同的数据源
  40. update OFPROPERTY set
  41. PROPVALUE=‘org.jivesoftware.openfire.user.JDBCUserProvider‘
  42. where NAME=‘provider.user.className‘;
  43. update OFPROPERTY set
  44. PROPVALUE=‘org.jivesoftware.openfire.auth.JDBCAuthProvider‘
  45. where NAME=‘provider.auth.className‘;
  46. commit;
--设置JDBC连接方式
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcProvider.connectionString‘, 

‘jdbc:oracle:thin:@10.35.246.178:1521:orcl‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcProvider.driver‘, ‘oracle.jdbc.driver.OracleDriver‘);

--设置管理员账号
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘admin.authorizedJIDs‘, ‘[email protected]‘);

--自定义用户认证
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcAuthProvider.useConnectionProvider‘, ‘true‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcAuthProvider.passwordSQL‘, ‘select ‘‘123456‘‘ as pwd from 

t_sys_user t where t.code=?‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcAuthProvider.passwordType‘, ‘plain‘);

--自定义用户管理
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.allUsersSQL‘, ‘select code from t_sys_user 

t‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.nameField‘, ‘name‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.searchSQL‘, ‘select code from t_sys_user t 

where code=?‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.useConnectionProvider‘, ‘true‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.emailField‘, ‘email‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.userCountSQL‘, ‘select count(*) from 

t_sys_user t‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.loadUserSQL‘, ‘select t.name,t.email,t.code 

from t_sys_user t where t.code=?‘);
insert into OFPROPERTY (NAME, PROPVALUE)
values (‘jdbcUserProvider.usernameField‘, ‘code‘);

--使用不同的数据源
update OFPROPERTY set 

PROPVALUE=‘org.jivesoftware.openfire.user.JDBCUserProvider‘
where NAME=‘provider.user.className‘;
update OFPROPERTY set 

PROPVALUE=‘org.jivesoftware.openfire.auth.JDBCAuthProvider‘
where NAME=‘provider.auth.className‘;
commit;

这里只用到了部分验证和用户管理相关的配置,更多的配置需要查看源码来获取

时间: 2024-11-01 17:57:30

openfire使用自定义用户表的相关文章

Django自定义用户表替换默认用户表认证

1.自定义用户表 from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser):   ##引用Django内置的AbstractUser表,并添加下列字段     nick_name = models.CharField(max_length=50,default="",

django自定义用户表

django中已经给我生成默认的User表,其中的字段已经可以满足我们的日常需求. 但有时候,我们需要更多的字段,我们就可以自定义.来替换django自带的User表. #models.py from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): nick_name = models.CharField(max_length=50, verbose_name=u'昵称') birth

django 自定义用户表替换系统默认表

首先新建一个users应用,编写这个应用的models类. from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): ...... 然后在settings里面加入应用. 最后重载用户model,如下: AUTH_USER_MODEL = "users.UserProfile" 最最后:makemigrations和migrate  根据提示输入YES,删除系统USER表,新建

Django自定义用户认证

自定义一个用户认证 详细参考官方文档: https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#django.contrib.auth.models.PermissionsMixin.has_perms 一.创建用户的表 UserProfile():存放用户信息的表 UserProfileManager(): 用户创建用户的类方法 1.生成一个单独的Moel文件专门用来存放用户表 #!/usr/bin/env python #

django之重构用户表

一.django自定义用户表格式(3.0.0) 数据库: Model类: class AbstractUser(AbstractBaseUser, PermissionsMixin): """ An abstract base class implementing a fully featured User model with admin-compliant permissions. Username and password are required. Other fie

签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件

签发token 源码入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接收有username.password的post请求 # 2)post方法将请求得到的数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处

基于Activiti5.15.1 自定义用户、组(User,Group)实现

基于Activiti5.15.1 自定义用户.组(User,Group)实现 本人刚接触Activiti,最近工作中需要将Activiti中原有的用户,组(ACT_ID_USER,ACT_ID_GROUP,ACT_ID_MEMBERSHIP)表替换为公司已有的相关表.查看了咖啡兔及论坛相关文章.今天有空整理一下.以帮助后续有此需要的初学者. 自定义Group,User工厂类,实现SessionFactory接口 1)CustomGroupEntityManagerFactory @Service

Django_自定义用户登录_三部曲

# Model 配置, Copy过去 class UserProfileManager(BaseUserManager): """创建普通用户 创建超级用户""" def create_user(self, email, name, password=None): """ Creates and saves a User with the given email, date of birth and password

web前端框架之自定义form表单验证

h3 { background-color: palegreen } 自定义form验证初试 1 1.在后端创建一个类MainForm,并且在类中自定义host ip port phone等,然后写入方法,在post方法中创建MainForm对象,并且把post方法中的self(这里的self指代 的前端的ip,端口等)传入到这个MainForm方法中,在check_valid方法中定义一个参数handler代指传入的self,然后遍历MainForm对象中的属性,然后用handler.get_