如何限制对资源的强制浏览(js,html,pdf,css,images)

时间:2014-02-28 07:11:23

标签: security jsp web

这个问题可能是多余的,但在搜索很多参考文献时我没有得到具体的答案。

我正在使用以下结构的项目。

MyProject
    -JavaResources
    - build
    - src
         - main
               - java
               - resources
               - webApp
                       - META-INF
                       - resources
                       - WEB-INF
                                - jsps

在这个项目结构中,我在上下文根(webApp)文件夹中有资源(js,css,images,pdf,html)但在WEB-INF的外面。

在jsp中,我正在获取具有上下文根路径的资源,如下所示:

<a href="<%=request.getContextPath()%>resources/Help.html" target="_blank"> </a>

由于这些资源可以通过浏览器直接加入上下文根路径并导致强制浏览。

我找到的一个参考是应用程序MyProject \ src \ main \ java \ resources文件夹。最终进入WEB-INF / classes文件夹 但是根据servlet规范

  servlet和实用程序类的

/ WEB-INF / classes / *目录。该   应用程序类加载器使用此目录中的类   加载来自。

的类

所以我不确定这是否适合资源。

我想知道最佳实践并将位置放在Web应用程序中拥有所有类型的资源(css,js,html,pdf,css),这些资源可以限制强制浏览以及在jsp中访问它们的方式。

提前致谢。

2 个答案:

答案 0 :(得分:1)

src/main/resources文件夹是标准的Maven文件夹,用于放置应用程序代码本身必须可读的资源,使用ClassLoader。例如:

InputStream in = MyClass.class.getResourceAsStream("/someFile.properties");

一旦应用程序由Maven构建,src / main / resources下的文件将最终位于webapp的WEB-INF/classes目录中。

这并不意味着放置必须由浏览器下载的文件。这些文件可以在webapp根文件夹下的任何位置,WEB-INF除外。

答案 1 :(得分:0)

通过浏览器在页面中使用的GET请求来访问Web资源。

从Web服务器的角度来看,如果用户使用浏览器网址或声明它的页面直接请求Web资源,即<javascript src="some/resource.js"/>

,则没有区别

通常的做法是将资源放在公共文件夹中,位于Web应用程序的根目录(正是您所做的)

如果要限制对资源的访问,请使用security-constraint,以便只有经过身份验证的用户才能访问它们。

如果您真的想限制只能从其他网页请求的资源访问权限,那么您可以构建Filter并仅在referrer标题为webapp页面时提供服务。