2012-04-23 134 views
3

我有一个运行一些Jersey RESTful服务的Tomcat服务器,我使用Apache来托管静态内容。大部分静态内容是空的,内容通过RESTful调用填充,但除了登录页面之外,我不希望任何人能够直接浏览到其他静态页面。我们有一个认证servlet,用于过滤对REST服务的任何请求,但我想知道处理静态内容的最佳方法是什么。如果可能的话,我宁愿不通过Tomcat提供静态内容。保护Apache提供的静态内容

编辑:我应该指出,只有在登录页面应该是直接访问,无需过滤等

+0

所以你想让静态文件请求通过你的servlet,然后让servlet完成Apache的请求?好像你会失去通过Apache服务静态文件的好处,如果请求通过Tomcat无论如何 – clmarquart 2012-04-23 14:57:08

+0

不,我宁愿通过Apache服务所有静态内容,只有通过Tomcat的REST调用。同时,如果用户未通过身份验证,我想尝试限制对一定数量的静态文件的访问,这是通过一些设置会话变量的REST调用完成的。 – 2012-04-23 19:42:26

+0

想到的第一个想法是设置一个Cookie,当用户验证你可以使用'mod_rewrite'在Apache中检查。不知道这是否适用于你... – clmarquart 2012-04-24 16:07:01

回答

2

想到的是设置在用户认证Cookie,你可以第一个想法然后使用mod_rewrite在Apache中检查。

不知道,虽然你的作品...

让我知道,如果你想一个例子RewriteRule

编辑 - 示例规则:

假设静态内容驻留在/static/目录,以下结果在401 Forbidden如果用户没有在(导致在cookie具有authenticated=true的值)记录

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^\/static\/ 
RewriteCond %{HTTP_COOKIE} !authenticated=true 
RewriteRule .* - [L,F] 

我已经使用这种方法来指导移动流量,但不是限制安全内容,所以我会推荐一些彻底的测试。

希望有所帮助。

+0

我记得听说90年代后期的一个mp3共享网站用会话guid做了符号链接,然后将URL作为静态资源共享。然后,他们有一个过程,查看静态资源的创建日期,并在30分钟后将其删除,这样如果有人试图共享URL,它们就会失败。适用于任何客户端,没有cookies,不是一个坏方法。 – 2012-04-25 16:02:11

+0

这是完美的。我现在正在使用HttpSession.setAttribute(),但我可以轻松地将其更改为cookie。一个示例RewriteRule将不胜感激。 – 2012-04-26 19:17:13

+0

对不起,花了这么长时间,但如果我还不迟,我已经添加了一个应该帮助的例子。 – clmarquart 2012-05-02 12:44:02