zoukankan      html  css  js  c++  java
  • openfire插件开发的几点说明

    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 argetopenfireliblog4j.xml,源代码的路径就是:/openfire_src/work/lib/log4j.xml

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

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

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


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

  • 相关阅读:
    你不知道的正则表达式
    浅谈apache网页优化及方法
    Web基础与HTTP协议
    nfs
    Vi编辑器的工作模式
    磁盘管理和磁盘配额
    系统安全及应用
    正则表达式与文本编辑器
    读书笔记_java设计模式深入研究 第三章 工厂模式 Factory
    JavaScript模式读书笔记 第7章 设计模式
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3159727.html
Copyright © 2011-2022 走看看