OpenFire通过User Service管理用户
安装OpenFire服务器略去
1.安装User Service插件:
在管理控制平台找到选项卡“插件”,里边有我们需要安装的一个User Service插件,如果安装过了会显示已经安装的哪些插件,没有安装,需要点击左侧菜单“有效的插件”,在列表里找到此插件进行安装,可能有点慢,稍等即可。如果在有效的插件列表没有发现很多的插件,那么你需要重新安装openfire服务器或者升级最新版本。
2:
在选项卡“服务器”找到“服务器设置”下有个菜单“User Service”,说明安装插件成功,但是还是需要进行设置才能通过端口进行访问,不然无法访问或者报错401未授权等。设置:Enabled - User service requests will be processed. 启用、勾选HTTP basic auth - User service REST authentication with Openfire admin account. 如果选择Secret key auth,那C#写着太麻烦,通过访问接口需要传Secret key的值,否则就是报错401。
还可以在系统属性里添加进行设置接口是否启用,需要设置2项值如下图:
3:然后就可以通过C#代码进行访问接口,获取所有的用户列表:
/// <summary>
/// 获取所有openfire用户
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
//这个地方的地址和用户名密码我是从配置文件读取的,大家可以直接赋值。
string url = CachedConfigContext.Current.SettingConfig.OpenFireServer + "plugins/userService/users";
WebRequest req = WebRequest.Create(url);
req.Method = "GET";
string username = CachedConfigContext.Current.SettingConfig.OpenFireUsername;
string password = CachedConfigContext.Current.SettingConfig.OpenFirePassword;
string usernamePassword = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
req.Credentials = mycache;
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
WebResponse result = null;
try
{
result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
//read the stream into a string
StreamReader sr = new StreamReader(ReceiveStream);
string resultstring = sr.ReadToEnd();
if (!string.IsNullOrEmpty(resultstring))
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(resultstring);
var xmlModel = XmlToObjList<OpenFireUser>(resultstring, "user");
this.ViewBag.existUsers = string.Join(",", xmlModel.Select(s => s.username));
return View(xmlModel);
} }
catch (Exception exp)
{ }
finally
{
if (result != null)
{
result.Close();
}
}
return View();
} /// <summary>
/// xml文件转化为实体类列表
/// </summary>
/// <typeparam name="T">实体名称</typeparam>
/// <param name="xml">您的xml文件</param>
/// <param name="headtag">xml头文件</param>
/// <returns>实体列表</returns>
public List<T> XmlToObjList<T>(string xml, string headtag)
where T : new()
{ List<T> list = new List<T>();
XmlDocument doc = new XmlDocument();
PropertyInfo[] propinfos = null;
doc.LoadXml(xml);
//XmlNodeList nodelist = doc.SelectNodes(headtag);
XmlNodeList nodelist = doc.GetElementsByTagName(headtag);
foreach (XmlNode node in nodelist)
{
T entity = new T();
//初始化propertyinfo
if (propinfos == null)
{
Type objtype = entity.GetType();
propinfos = objtype.GetProperties();
}
//填充entity类的属性
foreach (PropertyInfo propinfo in propinfos)
{
//实体类字段首字母变成小写的
string name = propinfo.Name.Substring(, ) + propinfo.Name.Substring(, propinfo.Name.Length - );
XmlNode cnode = node.SelectSingleNode(name);
if (cnode != null)
{
string v = cnode.InnerText;
if (v != null)
propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
}
}
list.Add(entity); }
return list; }
最后会返回一个xml的文件,里边是所有用户的信息。
至于新增、删除的接口就不做案例里,你可以通过管理控制平台查找demo,里边有介绍如何访问接口,查看地址:http://192.168.3.66:9090/plugin-admin.jsp?plugin=userservice&showReadme=true&decorator=none
如下图点击图标就可以查看此插件的demo:
通过User Service添加用户:
[HttpPost]
public JsonResult syncUser(string existUsers)
{
if (!string.IsNullOrEmpty(existUsers))
{
var array = existUsers.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
var Users = this.FoundationService.GetPersonMain(s => s.UnitID == this.CurrentManager.UnitID);
foreach (var item in Users)
{
if (array.Contains(item.UserName.ToLower()))
{
continue;
} var userXML = string.Format("<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <user> <username>{0}</username> <password>{1}</password> <name>{2}</name> <email>{3}</email></user>", item.UserName, item.Password, item.PersonName, item.Email);
//通过openFire user service添加用户
string url = CachedConfigContext.Current.SettingConfig.OpenFireServer + "plugins/userService/users";
WebRequest req = WebRequest.Create(url);
req.Method = "POST";
string username = CachedConfigContext.Current.SettingConfig.OpenFireUsername;
string password = CachedConfigContext.Current.SettingConfig.OpenFirePassword;
string usernamePassword = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
req.Credentials = mycache;
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
req.ContentType = "application/xml"; byte[] byteArray = Encoding.UTF8.GetBytes(userXML);
req.ContentLength = byteArray.Length;
Stream dataStream = req.GetRequestStream();
dataStream.Write(byteArray, , byteArray.Length);
dataStream.Close(); WebResponse result = null;
try
{
result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
//read the stream into a string
StreamReader sr = new StreamReader(ReceiveStream);
string resultstring = sr.ReadToEnd();
}
catch (Exception exp)
{
return Json(new { success = false, msg = "同步失败!" + exp.Message });
}
finally
{
if (result != null)
{
result.Close();
}
}
}
} return Json(new { success = true, msg = "同步成功!" });
}
OpenFire通过User Service管理用户的更多相关文章
- springBoot+springSecurity 数据库动态管理用户、角色、权限
使用spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
- window服务器上mongodb的安装与如何将mongodb设置为服务,为mongodb设置管理用户,mongodb连接字符串配置
最近公司有一个项目模块让用nosql-mongodb替换了,故,对mongodb做了一点研究,然后分享一下! 1.首先说一下安装时的坑 下载mongodb,如果你从官网下载,将会是一件很慢的事情,在公 ...
- springBoot+springSecurity 数据库动态管理用户、角色、权限(二)
序: 本文使用springboot+mybatis+SpringSecurity 实现数据库动态的管理用户.角色.权限管理 本文细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义滤 ...
- Windows 2012 R2上搭建IIS管理用户的隔离模式FTP
Windows 2012 R2上搭建IIS管理用户的隔离模式FTP Windows自带的FTP现在可以提供基于非OS用户的管理,这提高了安全性.即使FTP用户名和密码泄露,也不会对操作系统造成进一步的 ...
- MVC4做网站后台:用户管理 —用户
这块进行用户管理,可以浏览.查询已注册的用户,修改用户资料,删除用户等.没有做添加用户,不知是否必要.列表页还是使用easyui的datagrid.这个思路跟用户组的方式差不多. 1.接口Interf ...
- 【Java EE 学习 30】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】
一.闪回 1.可能的误操作 (1)错误的删除了记录 (2)错误的删除了表 (3)查询历史记录 (4)撤销已经提交了的事务. 2.对应着以上四种类型的误操作,有四种闪回类型 (1)闪回表:将表回退到过去 ...
- JavaWeb学习之tomcat安装与运行、tomcat的目录结构、配置tomcat的管理用户、web项目目录、虚拟目录、虚拟主机(1)
1.tomcat安装与运行双击tomcat目录下的bin/startup.bat,启动之后,输入http://localhost:8080,出现安装成功的提示,表示安装tomcat成功 2.tomca ...
- 配置Tomcat6的管理用户
在Tomcat上发布war之前需要配置一个管理用户以进入上传页面,而配置就是通过修改/usr/local/tomcat6/conf/tomcat-users.xml这个文件进行的.下面是修改后的文字: ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]
三.使用Azure AD管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信息 ...
随机推荐
- DRF-->1 序列化组件的使用和接口设计---get
定义序列化器(本质就是一个类),一般包括模型类的字段,有自己的字段类型规则.实现了序列化器后,就可以创建序列化对象以及查询集进行序列化操作,通过序列化对象.data来获取数据(不用自己构造字典,再返回 ...
- Windows 2008 R2 防火墙允许Serv-U通过的方法
在Windows 2008 R2上安装了Serv-U FTP服务端软件之后,无法通过客户端连接,究其原因是Windows 2008的防火墙没有开启FTP端口,而且在防火墙上添加Serv-U程序也不行, ...
- php和c++socket通讯(基于字节流,二进制)
研究了一下PHP和C++socket通讯,用C++作为服务器端,php作为客户端进行. socket通讯是基于协议的,因此,只要双方协议一致就行. 关于协议的选择:我看过网上大部分协议都是在应用层的协 ...
- 自定义Qt组件-通讯模块(P1)
通讯模块Communicator 通讯模块是整个项目设计中位于最底层的模块,用于处理与串口或网络等设备的通讯,所有设备的通讯通过CommManager类完成,上层软件设计时需要根据comm模块(主要是 ...
- GitKraken使用教程-基础部分(3)
5. 克隆服务器上的项目 首先,返回主界面,点击File => Clone Repo,选择 Clone with URL,如下图: 图 5‑1 SSH方式克隆仓库界面 1) SSH 方式连接仓库 ...
- MVC4笔记 @functions @model @using
/////@functions自定义函数////// @helper辅助方法的确可以很方便的完成辅助方法开发,不过却失去了一些弹性,例如,无法在@helper中自定义属性,只能单纯的传入参数,然后格式 ...
- pop3密码嗅探
成品与代码可在 https://pan.baidu.com/s/1MPfU2T_6YN6mgxUL0wrZxw 下载 来说下pop协议, 英文版,https://tools.ietf.org/html ...
- html:option
注意事项: (1):In HTML the <option> tag has no end tag.HTML中<option>标签不需要关闭.In XHTML the < ...
- 显卡(GPU)的基础知识
显卡的性能指标有: 流处理器(SP)数量 核心频率 流处理器的架构 显存容量 显存频率 显存带宽 1. 流处理器的数量 把一个GPU当成是一个画画的工厂,其中流处理器的数量就是画师的数量,其数量自然是 ...
- spring 类注入失败,解决之道
1.今天偶尔发现的问题,如果你在一个类上面用了注解@Async,spring的异步注解之后,发现如果别的类用@Autowired导入这个类时会失败! 解决办法:用了@Async无非是想方便的用异步操作 ...