resin中關於url rewrite來傳遞jsessionid的問題

最近兩天在項目中碰到,一個很奇怪的問題。同一個帳號屢次切換登陸時,會出現這個帳號的信息在session中找不到,雖然能夠登陸成功,可是以後這個用戶信息好像沒有保存到session中同樣,或者是被改變了,以前我一直是覺得被改變了,後來發現錯了。前端

  今天,在公司的系統架構師的幫助下,終於解決了這個問題。web

  首先咱們使用的resin的配置是 瀏覽器

  <session-config>
        <enable-url-rewriting>false</enable-url-rewriting>
    <!--<use-persistent-store>true</use-persistent-store>-->
      </session-config>安全

  這樣的。這樣禁用了jsessionid以cookie的方式在頁面傳遞。可是咱們的前端是用jsessionid放到URL來進行會話的維持的。cookie

  將jsessionid放到url中,這樣能夠不使用cookie。 
  不使用cookie,能夠避免遭遇用戶禁用cookie的狀況。另外,有安全性方面的考慮
session

使用url rewrite有兩種方式:架構

1. http://***/wmail/welcome.action;jsessionid=abcLFJLwoeurlsjdlf?... 
這種是將jsessionid放在action後面
app

須要修改resin/conf/resin.conf中的配置爲: 
<session-config> 
<enable-cookies>false</enable-cookies> 
<enable-url-rewriting>true</enable-url-rewriting> 
</session-config>
webapp

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?... 這樣的地址。

相關文章
相關標籤/搜索