2016-06-22 23 views
0

我有一個運行在Tomcat 5上的完全有效的Web Java 1.5 Web應用程序。應用程序依賴於它的會話,因此只要會話Cookie被傳遞,或JSESSIONID出現在上下文結尾路徑是這樣「; JSESSIONID = ...」如何使用JSESSIONID設置特定的會話?

我現在必須讓我的應用程序的工作,在工作原理是這樣的環境:

  • 我的應用程序的每個請求都將是一個POST到只有一個URL,沒有任何參數(所以我不能在上下文路徑中設置jsessionid)。
  • 不允許重定向,我必須返回HTTP狀態200與我的迴應。
  • POST的主體是一個特定的XML(我可以在那裏添加自定義參數)。

由於我的應用程序老舊並且運行良好,我希望在不必更改所有內容的情況下完成這項工作。我能夠通過在XML主體中添加一個參數,即應該執行的實際URL,然後將響應轉發到該URL,並在其中附加其餘參數,從而實現單個URL的工作。這裏有一個例子:

POST http://server.com/singleUrl.do 

<xml> 
    <parameters>url=realPage.do&amp;param1=value1&amp;param2=value2</parameters> 
</xml> 

我再往前這:

http://server.com/realPage.do?param1=value1&param2=value2 

和它的作品。我剛添加了一個抽象層到我的應用程序,並且一切正常。除會議...

由於沒有會話cookie被髮送,我失去了我的會議之間的POST。我加入了JSESSIONID作爲XML自定義的參數之一,像這樣:

<xml> 
    <parameters>url=realPage.do&amp;param1=value1&amp;param2=value2&amp;jsessionid=ABC121312</parameters> 
</xml> 

,並試圖轉發到:

http://server.com/realPage.do;jsessionid=ABC121312?param1=value1&param2=value2 

但它不工作。同樣的事情,重定向,工作。但是,當然,在我的新要求中,不允許重定向。

最後,我的問題。我怎麼能設置對應於JSESSIONID的會話?我希望在將它發送給我的「真實」應用程序之前處理請求的同一抽象層中執行此操作。

+0

Cookie在請求標題中設置。如果你給出的約束不允許你保持同一個會話,他們將不得不改變。 – EJP

+0

相信我,我對此有過激烈的爭論。他們的平臺不能改變。無論是作爲客戶還是失去他們。 – manugarciac

回答

0

我想我已經想出了一個解決方案...我已經實現了一個代理,該代理解析XML,然後發出一個新的請求,並帶有JSESSIONID。然後,我將該請求的回覆寫入真實請求的回覆中。

我做了一個原型,它似乎工作。這真的很難看,但至少我的應用程序並不知道這實際上正在發生。