1.关于插件的目录结构

这个网上的资料很多,但是我觉得要看懂也不太容易,我这里上一个包括了jsp和servlet的图,希望大家能马上看懂:

ME的Navigator视图下的截图:

build path配置

这里要注意,如果你的plugin里边有自己的jsp文件,那最好把整个openfire_src/work/lib下的包引进来,以免ant编译时找不到jasper类而报错。当然,这里边也包含了openfire.jar,插件调用openfire api时就用到了。

至此,你的项目基本该怎么弄,就怎么弄吧。

发个官网上的目录结构:

2.插件项目的命名

项目的名称无所谓大小写,插件名称也与plugin.xml里边的name属性没丝毫关系,plugin.xml里边的name属性只在openfire插件管理界面里边做显示用。

但是你的i18n文件命名就要注意了,一定要是%[plugin_name]%_i18n "_" language ".properties"格式。

代码里获取插件时的名称是大小写无关的。

plugin = (MainPlugin) XMPPServer.getInstance().getPluginManager()
.getPlugin("popplugin");

3.去掉openfire的登录验证

对于一些安全性不高的插件来说,可能根本并不需要openfire的登录,那怎么单独对自己插件的url进行排除呢?接着往下看!

有两种方法:修改openfire的web.xml或使用AuthCheckFilter.addExclude方法其中一种即可

1)修改openfire的web.xml

这个web.xml出现在openfire的源码很多地方,了解正确的配置方法很重要。下面展示不同路径下的web.xml修改说明,取其一即可。

a. 修改/openfire_src/src/web/WEB-INF/web.xml,修改完后,记得还要用ant编译一次并重启才能生效。

b. 修改/openfire_src/target/openfire/plugins/admin/webapp/WEB-INF/web.xml

修改完后,直接重启即可生效,本方法同样适用于安装版的openfire

    <filter>
<filter-name>AuthCheck</filter-name>
<filter-class>org.jivesoftware.admin.AuthCheckFilter</filter-class>
<init-param>
<param-name>excludes</param-name>
<param-value>
popplugin/*,login.jsp,index.jsp?logout=true,setup/index.jsp,setup/setup-*,.gif,.png,error-serverdown.jsp,setup/clearspace-integration-prelogin.jsp
</param-value>
</init-param>
</filter>

url的匹配规则比较复杂,有兴趣的同学可以去看AuthCheckFilter类源码,如果要测试自己的pattern对不对,可以使用org.jivesoftware.admin.AuthCheckFilterTest类执行JUnitTest试试,如自己加上一段:

        assertTrue(AuthCheckFilter.testURLPassesExclude("popplugin/sendmessage", "popplugin*"));
assertTrue(AuthCheckFilter.testURLPassesExclude("popplugin/sendmessage", "popplugin/sendmessage"));

2)使用AuthCheckFilter.addExclude方法

调用该方法和配置web.xml的效果是完全一样的,个人建议用此方法,因为本方法绿色安全、无污染,不修改和破坏原生openfire代码。

这个方法可以在servlet的init方法或plugin的initializePlugin方法中调用。

个人建议在servlet的init方法中调用,因为servlet的init方法比plugin的initializePlugin方法更早初始化,这个问题在“插件初始化顺序”会讲到。

使用完后记得removeExclude一下,有始有终嘛。

    @Override
public void init() throws ServletException
{
System.out.println("UserMgrServlet init....");
AuthCheckFilter.addExclude("popplugin/usermgr*");
AuthCheckFilter.addExclude("popplugin/usermgr/*");
} @Override
public void destroy()
{
System.out.println("UserMgrServlet destroy....");
// Release the excluded URL
AuthCheckFilter.removeExclude("popplugin/usermgr*");
AuthCheckFilter.removeExclude("popplugin/usermgr/*");
}

4.如何编译自己的openfire插件

比较流行的一篇文章《一步一步开发自己的openfire插件》里,用的是自己写的ant脚本,本人不推荐,除非你对ant脚本非常熟悉。

我建议的做法是:

先把openfire源代码下载下来并成功用build.xml编译部署;

将自己的plugin项目copy到/openfire_src/src/plugins下;

执行openfire自带的build.xml,执行命令如下:

ant -f build.xml -Dplugin=插件名字 plugin

用自带的build.xml和源码编译的好处是:编译完后,插件会自动发布更新。

发布完成后,你的plugin就会出现在/openfire_src/target/openfire/plugins/下.

发布后完整的plugin目录如下:

5.插件初始化顺序

1.创建你的plugin对象实例

2.创建你的servlet对象实例

3.调用你的servlet.init()方法

4.调用你的plugin.initializePlugin()方法

这里要注意3和4两个步骤,不要像我当初一样,一位先是4,再是3,然后把一些初始化操作放到4中去,结果在servlet调用的时候出现了空指针异常。

6.插件的日志

最后,再配上日志,你的插件环境基本就搭建好了。剩下的就是添加功能了,这个相信对各位来说就不成问题了。

1.将log4j.jar添加进你的plugin的lib目录下,并添加进classpath。

2.需要日志的java类中添加日志代码

3.找到openfire的log4j.xml配置文件,目录为:openfire_src\target\openfire\lib\log4j.xml,源代码的路径就是:/openfire_src/work/lib/log4j.xml

4.为自己的package和class配置独立的日志。如果不修改log4j.xml,则openfire会将你的日志输出到openfire_src\target\openfire\logs相应的级别日志下。

7.插件访问自己的i18n属性

LocaleUtils.getLocalizedString("popplugin.destroyPlugin", "popplugin")

第一个参数是i18n配置文件中的key,第二个是插件名称,与加载插件时的名称一致。

openfire插件开发的几点说明的更多相关文章

  1. openfire插件开发之完美开发

    http://redhacker.iteye.com/blog/1919329 一.说在前面 在继上篇Openfire3.8.2在eclipse中Debug方式启动最简单的方式后,我研究了openfi ...

  2. Openfire插件开发图解

    概述 Openfire插件开发是Openfire的精髓之一,支持插件热插拔,还可以方便的在web端进行管理插件.插件分为两种,一种是以服务为主的控制台插件,一种是包括页面或对外开放Servlet接口. ...

  3. (转)openfire插件开发(二) 基于web的插件开发

    转:http://blog.csdn.net/lovexieyuan520/article/details/38935137 在前面的博客中,我介绍了openfire插件开发,在那篇博客中我详细的说明 ...

  4. openfire插件开发入门1

    .案例插件的功能 这个插件很简单,就是在openfire Server启动时,和关闭时,在控制台打印出消息. 3.插件开发的目录结构设计 先来看一下当前openfire在eclipse中的目录结构: ...

  5. (转)openfire插件开发(一)

    转:http://blog.csdn.net/lovexieyuan520/article/details/37774909 1. 在上一篇博文中,我介绍了Openfire3.9.3源代码导入ecli ...

  6. openfire插件开发环境

    创建java工程 SamplePlugin: package com.hoo.server.plugin; import java.io.File; import org.jivesoftware.o ...

  7. (转)openfire插件开发(三)通过http方式向openfire客户端发信息

    转:http://blog.csdn.net/hzaccp3/article/details/19964655 需求:  通过http方式,向openfire客户端发信息(非XMPP协议)openfi ...

  8. openfire插件开发1

    http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html http://www.cnb ...

  9. 在XMPP的JAVA开源实现Openfire中,增加LBS 附近的人功能

    1. XMPP协议 与 Openfire XMPP协议是IM领域的标准协议了,具体可参考  http://xmpp.org   及RFC6120,RFC6121,RFC6122等相关文档. http: ...

随机推荐

  1. JDBC使用数据库来完成分页功能

    本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实 ...

  2. 【Java数据结构】Java数据结构之链表反转

    我们都知道用C可以很简单的实现单链表反转,今天来学习下,在Java中如何实现链表反转. 思路很简单,定义一个类,这个类分成2块,一块是表示自身的标志,另外一个存储指向下一个元素的引用.通过互换相邻两个 ...

  3. win7 下使用cygwin

    http://cygwin.com/index.html      还是看官网! 很多用windows的朋友不习惯于用linux的开发环境.虽然很乐意尝试一下,但是往往怕 linux系统打乱了自己的正 ...

  4. DAG上的动态规划

    嵌套矩形问题(最长路及其字典序)有n个举行,选出尽量多的矩阵排成一排,使得除了最后一个之外,每一个矩形可以嵌套在下一个矩形内,并且打印 #include <iostream> #inclu ...

  5. LaTeX新人教程,30分钟从全然陌生到基本入门

    1.LaTeX软件的安装和使用  方法A(自助):在MikTeX的官网下载免费的MikTeX编译包并安装.下载WinEdt(收费)或TexMaker(免费)等编辑界面软件并安装.  方法B(打包):在 ...

  6. Android剪切板(ClipboardManager) 复制文本

    Android也有剪切板(ClipboardManager) 注意:导包的时候 API 11之前:  android.text.ClipboardManagerAPI 11之后:  android.c ...

  7. Net Core子应用由于配置引起IIS错误500.19

    Asp.Net Core子应用由于配置中重复添加模块会引起IIS错误500.19 ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前 ...

  8. 根据图像路径,创建CBitmap对象的方法

    因为项目的关系,需要根据图像路径,创建CBitmap对象.起初查资料找到了LoadBitmap这个函数,根据CSDN得 BOOL LoadBitmap ( LPCTSTR lpszResourceNa ...

  9. Data Recovery Advisor(数据恢复顾问)

    Data Recovery Advisor 是11g新特性,是Oracle顾问程序架构的一部分,它会在遇到错误时自动收集有关故障信息.如果主动运行Data Recovery Advisor,通常可以在 ...

  10. FatMouse&#39; Trade(杭电1009)

    FatMouse' Trade Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Tot ...