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\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,第二個是插件名稱,與加載插件時的名稱一致。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM