resin的session id reuse特性(3)--總結(jié)
從對(duì)resin源碼的追蹤到resin配置文件中的設(shè)置,可以明確的看到,resin在設(shè)計(jì)上是提供了session id 的reuse功能,而且resin.conf默認(rèn)就是打開reuse的。慚愧的是,我一直不知道......事情要從前段時(shí)間的工作談起,我被要求設(shè)計(jì)出一套合適的方案來解決目前公司現(xiàn)有的幾個(gè)前臺(tái)模塊各自為政的問題。其中最核心的兩個(gè)就是多機(jī)負(fù)載分擔(dān)和統(tǒng)一認(rèn)證功能。目前公司產(chǎn)品中多機(jī)負(fù)載有兩種方式: 1. 純r(jià)esin,放棄了對(duì)HttpSession和本地資源的使用 2. apache + resin,需要傳遞所有需要用到的參數(shù),因?yàn)槁闊┧懈纱嘀挥幸粋€(gè)單一入口,因?yàn)槭褂昧薍ttpSession,因此雖然頁面跳轉(zhuǎn)進(jìn)來了,但是由于沒有原來的jsessionid無法利用上一次進(jìn)入該模塊時(shí)的session,造成要重新創(chuàng)建新的session,非常的吐血。
之后針對(duì)apache + resin的多機(jī)分布方案進(jìn)行了調(diào)研,隨即發(fā)現(xiàn)這個(gè)方案的核心就在于jsessionid參數(shù)的傳遞。在研究jsessionid傳遞的時(shí)候無意中發(fā)現(xiàn)使用cookie傳遞jsessionid到另外一個(gè)webapp,這個(gè)webapp新生成的HttpSession的id(就也是jsessionid),居然和傳遞過來的上一個(gè)webapp的jsessionid相同!
驚喜萬分啊,依照這個(gè)特性,完全可以在各個(gè)webapp之間只傳遞jsessionid這一個(gè)參數(shù)。負(fù)責(zé)登錄的"主webapp"在HttpSession中保存用戶資料,所有其他webapp都可以使用jsessionid作為標(biāo)志到"主webapp"來獲取這些用戶資料,只要"主webapp"提供一個(gè)簡單的接口即可。隨后編碼測試了一下,發(fā)現(xiàn)這個(gè)方案非常好的解決了我目前的問題,簡直完美了: apache + resin多機(jī)分布,多webapp之間頁面任意跳轉(zhuǎn),簡單到只要攜帶一個(gè)jsessionid(這個(gè)還可以放cookie)就可以跨webapp四處亂跑。
隨即編碼測試了一遍,驗(yàn)證這個(gè)方法的的確可行。稍后我再將這個(gè)方案的詳細(xì)情況整理出來分享給大家。
這個(gè)方案基石,就是jsessionid的傳遞和jsessionid的重用。在這次方案探索之前,我對(duì)jsessionid重用完全沒有概念,也根本不知道resin已經(jīng)有對(duì)這個(gè)特性的支持。一路摸索過來,幾經(jīng)周折,最后發(fā)現(xiàn)原來resin早就準(zhǔn)備好了現(xiàn)成的解決方案,為類似我這種多webapp的系統(tǒng)提供session id reuse的支持。
想起了這句詞:“眾里尋她前百度,驀然回首,那人卻在燈火闌珊處”。呵呵,頗有感覺。
后記: 看來對(duì)resin的了解還是不夠深入啊,否則如果之前對(duì)session id reuse有了解的話,應(yīng)該可以直接就想到這個(gè)方案了。這次能誤打誤撞的發(fā)現(xiàn),運(yùn)氣著實(shí)不錯(cuò)。另外似乎tomcat好象不提供類似的特性支持,稍后再繼續(xù)研究。
posted on 2007-12-28 16:28 sky ao 閱讀(1760) 評(píng)論(4) 編輯 收藏 所屬分類: web