2011-11-04 25 views
0

我們有一個運行在Weblogic 10.3上的應用程序,在應用程序本身提供了身份驗證。我們希望將Weblogic放在Apache服務器的後面。我們的想法是,我們將在Apache服務器上擁有一些公共內容,並通過反向代理訪問應用程序。這非常非常標準。問題出在Apache服務器上有一些內容只有在用戶登錄應用程序時才能被訪問。所以基本上在Apache服務器將服務器三式的內容,對diferent的URI:Apache作爲反向代理,身份驗證從後向前傳遞

  • /- >將包含公共信息,並會由Apache是​​服務器
  • /對myApp - >將被重定向Apache到後面的weblogic
  • /private - >將包含私有靜態信息。只有當用戶先前在myApp中成功登錄時,才應該訪問此應用程序。

我的問題(我是一個Apache的新手)是否可能。我的想法是,應用程序可以在響應中放置一個cookie,指示用戶是否登錄了應用程序,並且Apache會在用戶嘗試訪問/ private時檢查該cookie。

有什麼想法?

回答

4

/公共信息是沒有問題的,它很簡單。使用ProxyPassProxyPassMatch可將代理「/ myApp」反轉爲您的內部Weblogic服務器也很簡單。您可能需要使用其他幾個選項來確保代理主機名和Cookie域的設置正確。但是在「/ private」中設置靜態保護信息會變得更棘手。

1)您可以使用mod_rewrite,這樣的檢查由對myApp設置cookie的存在:

RewriteCond %{HTTP_COOKIE} !the_name_of_the_auth_cookie 
RewriteRule ^private - [F,L] 

通過這樣的檢查一個cookie的問題是,有沒有辦法來驗證該cookie實際上是一個有效的會話。人們可以隨意創建一個具有該名稱的cookie並且能夠訪問/ private中的數據。


2)您可以設置它,以便任何東西「/私人」訪問,該請求被重寫PHP腳本或東西,可以檢查Cookie以確保它是一個有效的會話cookie,然後提供請求的頁面。喜歡的東西:

RewriteRule ^private/(.*)$ /cookie_check.php?file=$1 [L] 

因此,當有人訪問,例如,「/private/reports.pdf」,它被內部重定向到「/cookie_check.php?file=reports.pdf」,它是給這個PHP腳本來訪問它所需的任何內容,以驗證/ myApp設置的cookie。如果cookie是有效的會話,請閱讀「reports.pdf」文件並將其發送到瀏覽器,否則返回FORBIDDEN。

我認爲這是處理這個問題的最好方法。


3)如果您不能運行PHP或任何其他腳本,或者Cookie無法verifed(像session_id的或類似的東西)的數據庫查找,那麼你就必須從代理在WebLogic中。這與通過「cookie_check.php」訪問「/ private」除了它是WebLogic服務器上的應用程序之外,其基本思想不太一樣。就像/ myApp一樣,您需要設置一個反向代理才能訪問它,然後這個應用程序將獲取請求(已從內部從「/ private/some_file」中重寫)檢查cookie的有效性,讀取「some_file」文件在APACHE SERVER上,然後將其發送到瀏覽器,或發送FORBIDDEN。這是總體思路:

ProxyPass /CheckCookie http://internal_server/check_cookie_app 

RewriteCond %{REMOTE_HOST} !internal_server 
RewriteRule ^private/(.*)$ /CheckCookie?file=$1 [L] 

這個條件重新路由所有請求爲「/私有」這並不能阻止「internal_server」通過/ CheckCookie應用起源,而且由於應用程序是在「internal_server」它可以運行只需訪問「/ private」中的文件即可。這是一種完整的方式,但如果只能在WebLogic服務器上檢查/ myApp發出的會話cookie的有效性,則必須來回重新路由請求或類似的請求。

+0

謝謝!當然,最好的選擇是2.我想我會準備應用程序,以便嚮應用程序發出的每個請求都有一個帶有腳本的cookie,超時時間將被注入頁面(在一個級別域),並且當訪問/私人時它將解密cookie,檢查超時,如果可以,向用戶顯示頁面。唯一的問題是主頁(公共和私人部分)都會使用Drupal,所以我需要檢查如何設置Drupal來查找該Cookie。 –