前段時間做公司前臺方案的技術探索時,涉及到jsseionid的傳遞,期間嘗試使用resin自己的url rewrite功能來傳遞jsessionid參數,總結如下:
一) 默認的jsessionid
默認配置中,jsessionid以cookie的方式在頁面傳遞,即在http請求的header中有以下內容:
Cookie: JSESSIONID=abcrmF3Gx-5Z-hhkgHfzr
此時resin/conf/resin.conf中的配置為默認的:
<session-config>
<enable-url-rewriting>false</enable-url-rewriting>
</session-config>
二)使用url rewrite傳遞jsessionid
將jsessionid放到url中,這樣可以不使用cookie。
不使用cookie,可以避免遭遇用戶禁用cookie的情況。另外,有安全性方面的考慮。
使用url rewrite有兩種方式:
1. http://***/wmail/welcome.action;jsessionid=abcLFJLwoeurlsjdlf?...
這種是將jsessionid放在action后面
需要修改resin/conf/resin.conf中的配置為:
<session-config>
<enable-cookies>false</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
</session-config>
2. http://***/~jid=abcLFJLwoeurlsjdlf/wmail/welcome.action?...
除了要按照前面的同樣修改resin/conf/resin.conf中的配置為:
<session-config>
<enable-cookies>false</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
</session-config>
還要在resin/conf/resin.conf中增加alternate-session-url-prefix的設置:
<server>
<class-loader>...</class-loader>
<alternate-session-url-prefix>/~jid=</alternate-session-url-prefix>
......
注意alternate-session-url-prefix的位置,不是在<session-config>里面
測試中發現,按照這種方式配置后,url被重寫為
http://***/~jid=abcLFJLwoeurlsjdlf/wmail/welcome.action?...
在瀏覽器中訪問會產生http 404 file not found 錯誤,經反復檢查(吐血的經歷),發現需要修改resin/conf/resin.conf中的配置:
<server>
......
<host id="" root-directory=".">
<!--
<web-app id="/" document-directory="webapps/ROOT"/>
-->
</host>
</server>
將<web-app id="/" document-directory="webapps/ROOT"/>的設置屏蔽后才能正常訪問
http://***/~jid=abcLFJLwoeurlsjdlf/wmail/welcome.action?...
這樣的地址。