2011-11-04 89 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。 –