openfire整合使用者 之 改變密碼驗證方式

來源:互聯網
上載者:User

我要說的是改變openfire密碼驗證方式的方案,情形是這樣的:在openfire預設的驗證方式,主要藉助DefaultAuthProvider,以登入操作為例,由BlowFish類提供加解密方案並由AuthFactory來管理對BlowFish的調用,從而完成使用者輸入密碼的校正過程,具體過程大家可以跟代碼,不過比較肯定的一點是openfire伺服器在收到<auth />節的訊息後開始校正工作的。

我看了網上的一些關於使用者整合的資料,這個是openfire官方的資料http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/db-integration-guide.html,這個是某網友整理的資料http://hi.baidu.com/tonent/blog/item/8e4d00d536f477cf50da4b3b.html,可能站的高度比較高吧,說的也比較清楚,只是在我具體實現時會有各種各樣的疑問。我目的是修改密碼的加密方式,改為MD5加密,我的思路是藉助JDBCAuthProvider驗證登入,通過繼承JDBCUserProvider重寫createUser和deleteUser方法這樣的方式,來建立刪除使用者。之所以選擇繼承是為了遵循閉合原則,保持原openfire的完成性,可以把繼承類寫在外掛程式裡,只要在配置provider.user.className參數時指定它的全路徑名即可。注意新的isReadOnly()要return
false,也就是告訴外部的調用者,該類(UserProvider)還可以完成修改資料的工作。

具體操作和上述連結所講的差不多,不過由於我在開發中沒有用到組的資料,所以provider.group.className仍取預設值,個人感覺這樣做應該沒什麼問題。有點需要注意的是jdbcProvider.connectionString的值問題,如果直接在ofproperty表中添加資料可以直接寫,如jdbc:mysql://localhost/dbName?user=user&password=password&useUnicode=true&characterEncoding=utf-8,不過在xml文檔裡配置的話要把&寫成&amp;這樣的形式。還有指定jdbcAuthProvider.passwordType為md5(想要的加密方式),不過查看JDBCAuthProvider的類注釋可以看到它只支援plain,md5,sha1,sha256,sha512等加密方式,若是不在這個範圍之內,要寫自己的AuthProvider的。

如果上面說的不是很明白的話,一定要看代碼,包括業務代碼還有各種注釋。通過堆疊追蹤具體的執行流程,我把DefaultAuthProvider和JDBCAuthProvider驗證方式的堆棧調用貼出來吧,都是登入操作的代碼執行過程。

上面是Default的,下面的是JDBC的,要注意DigestMD5Server和SaslServerPlainImpl的處理,最後都會交給XMPPCallbackHandler。前一種是在收到<response />節的內容開始的,後一種是收到<auth />節後開始。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.