在WEB-INF下移动资源

Posted

技术标签:

【中文标题】在WEB-INF下移动资源【英文标题】:Moving resources under WEB-INF 【发布时间】:2012-08-18 18:15:33 【问题描述】:

我有一个包含数百个 htmljavascript 和图像文件的 Web 应用程序。这些文件位于根目录下:

my_root--
    -- html
    -- js
    -- images

这些文件夹包含一些子文件夹。

出于安全原因,我需要将所有这些资源移到 WEB-INF 文件夹下,这样它们就不能被直接访问。

目前 JSP 和 servlet 文件已经在 WEB-INF 文件夹下。

对我来说,安全地移动 WEB-INF 下的所有 HTML/JavaScript/images 文件夹而不破坏所有链接/转发到这些文件夹中的资源并确保无法直接访问这些资源的最简单方法是什么?

我正在使用 WebSphere 和 WebLogic 服务器。

【问题讨论】:

你能举一个简单的例子来帮助更清楚吗 - 你的意思是你想通过将它移动到 WEB-INF 来阻止用户访问'/examplepage.jsp'?用户当前如何访问页面 - 您是否使用 Struts 等框架? 【参考方案1】:

什么是我最简单的方法来安全地移动 WEB-INF 下的所有 html/js/images 文件夹而不破坏所有链接/转发到这些文件夹中的资源并确保这些资源不能直接访问?

你在这里犯了一个思考错误。 HTML/JS/图像(和 CSS)资源需要无论如何都可以直接访问。对于 JSP,情况有所不同,其中一些(如果不是全部)需要由 servlet 预处理(例如,从数据库中检索一些列表以显示在表中)。如果直接访问这些 JSP,那么将完全跳过该 servlet 步骤,这绝对不是您想要的(JSP 最终“空”;没有来自数据库的任何数据)。这就是为什么它们应该隐藏在/WEB-INF 中以防止直接访问而无需首先通过预处理servlet。此外,在基于 servlet 的 MVC 框架的情况下,整个 MVC 框架过程(收集请求参数、转换/验证它们、更新模型值、调用操作等)都将被跳过。

您的具体功能要求并不完全清楚(整个问题本身毫无意义;答案只是“不要那样做”),但如果您实际上想要限制访问对于根本不需要由 servlet 对某些用户进行预处理的静态资源,那么您需要实现身份验证/登录系统。为此,您可以使用容器管理的身份验证或自行开发 Filter

【讨论】:

【参考方案2】:

您可以使用一个非常简单的工具(例如 notepad++)并使用 findAndReplace 功能。 Eclipse 也可以做到这一点,但要有效地找到每个引用会变得很棘手。

请注意,还有其他方法可以阻止用户访问您的图片。将内容留在原处并指示 websphere 停止从图像文件夹中提供这些图像可能更容易

【讨论】:

我对这个建议感到沮丧 with a very simple tool like notepad++ and use the findAndReplace feature :-( 我认为这是个非常糟糕的主意 为什么@Kowser 是个坏主意? 1.它不能保证所有链接都会被修复 2.它可能会替换重要的hardcoded 对某些资源的引用,这并不意外

以上是关于在WEB-INF下移动资源的主要内容,如果未能解决你的问题,请参考以下文章

关于WEB-INF目录下的静态资源(jscssimg)的访问

WEB-INF下资源访问问题

jsp访问WEB-INF下面的资源-jsp

访问WEB-INF下JSP资源的几种方式(转)

spring项目中web-inf下不能引用页面资源

WEB-INF下资源访问问题