簡體   English   中英

Java HTTP代理

[英]Java HTTP Proxy

我正在一個項目中,我們希望從一個舊版應用程序中提取內容,但要避免向用戶顯示“正在等待www.somehostname.com/someproduct / ...”。

我們可以輕松地添加另一個指向同一服務器的域,但是仍然存在URL中someproduct上下文根的問題。 不能簡單地更改上下文根,因為在舊版應用程序中有數百個硬編碼位引用了現有的上下文根。

我想做的是能夠將請求發送到其他上下文根目錄(說/foo/bar.do ),並使其實際轉到/someproduct/bar.do (但沒有重定向,因此瀏覽器仍顯示/foo/bar.do )。

我發現了一些URL重寫選項,它們執行類似的操作,但到目前為止,它們似乎都僅限於僅向/從同一上下文根捕獲/轉發請求。

那里有處理此類事情的項目嗎? 我們正在使用weblogic 10.3(在舊版應用程序中是weblogic 8)。 理想情況下,我們可以將其作為新應用程序的一部分進行托管,但是如果需要,我們還可以在舊應用程序中添加一些內容。

或者,是否有一些完全不同的解決方案可以比我們更好地更好地工作?

更新:我應該提一下,我們最初已經建議將apace與mod_rewrite或類似的東西一起使用,但是管理/托管對此解決方案持反對態度。 :/

更新2更多信息:

用戶能夠看到舊的url /上下文根的位置與從舊的應用程序加載到新應用程序的iframe中的頁面/工作流有關。

因此,客戶端可以看到的兩個應用之間的通信確實沒有什么特別的,它是瀏覽器處理的簡單的舊HTTPS。

為什么不將Weblogic與Apache結合使用呢

這是一個非常標准的設置,還將帶來許多其他優點。 apache中的URL重寫非常受支持,並且文檔非常出色。

不要因為設置而推遲,因為它非常簡單,如果需要,您可以在同一框中運行apache。

我認為您應該能夠使用相當簡單的自定義servlet來做到這一點。

在較高的級別上,您將:

  • 將servlet映射到/ foo / *之類的映射
  • 在Servlet的實現中,只需獲取請求的pathInfo ,然后使用該路徑向舊站點發出請求(使用HttpUrlConnection或等效的Apache Commons)。
  • 將響應傳遞給客戶端(可能需要一些處理才能處理標頭)。

使用Restlet將允許您執行此操作。 可以使用Redirector對象 例如,請參見此處此處

客戶端正在使用的API的更多上下文將有助於在此處提供可行的解決方案。 您是否要提供一個完全不同於傳統Java EE應用程序的全新API? 服務API的工件是什么(Servlet,EJB,REST服務)?

如果您有其他企業應用程序提供的API,那么我想您只是使用Pojo類作為通向傳統應用程序的網關,然后可以通過除新服務應用程序之外的另一個上下文根來訪問該應用程序。 該解決方案將假定您知道所有舊版API方法,並將它們映射到新API的調用。

對於通用解決方案,您不必擔心調用什么方法。 我很好奇代理方法是否真的可行。 通過URL重寫是否還將用戶憑據正確提供給舊系統? 您是否需要切換到其他用戶來進行舊式呼叫,而不是使用原始呼叫者? URL重寫有可能嗎? 不知道這是否可以在安全的環境下工作。

也許您可以在此處提供更多信息。

如果改為提供JSP頁面,則可以使用標記執行請求服務器端。

這樣,用戶甚至都不知道該資源是外部資源。

http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM