【问题标题】:How to secure access to static resources in Spring如何在 Spring 中保护对静态资源的访问
【发布时间】:2012-12-29 00:47:09
【问题描述】:

我正在从 Web 应用程序外部的文件夹中提供图像。我将图像存储在 C:\source\Pictures 中。我在 spring 的 servlet 上下文文件中将此资源配置为静态资源:

<resources location="file:///C:/source/Pictures/" mapping="/img_resources/**"/>

我使用

显示存储在该文件夹中的图像
<img src="<spring:url value='/img_resources/guinnes_choc_cake.jpg/'/>"></img>

它对我很有效。但是,我有安全方面的顾虑。我不想将我服务器中的目录公开。1

有没有办法在 Spring 中围绕这个文件夹构建安全性?

【问题讨论】:

  • 也许您应该接受对之前问题的一些回答?
  • @micha 谢谢你提醒我 ;)
  • “围绕这个文件夹建立安全”——你想到了什么样的“安全”?什么是允许的,什么是不允许的?
  • @Marcel 一些在线资源提到,通过将文件夹作为静态资源,您允许网络上的任何人访问该文件夹。我想阻止人们这样做。
  • 我问是因为您对@ialencar 的回答的反馈似乎很奇怪(对我来说)。您想要“安全”,即访问限制,但另一方面您不希望只有经过身份验证的用户才能访问?要么...

标签: spring spring-mvc spring-security


【解决方案1】:

如果您使用的是 Spring Security,您可以在 Spring 上下文文件中添加类似的内容:

<sec:intercept-url pattern="/img_resources/**" access="isAuthenticated()" />

【讨论】:

  • 看起来棒极了。但是,这是否意味着只有经过身份验证的用户才能查看图像?如果是这样,那么我最终可能会得到一个根本没有图片的网站。我仍然想让公众查看图像。
  • 实际上 isAuthenticated() 是可用的表达式之一,显然在您的情况下您将不得不使用“permitAll”。在这里您可以找到 Spring Security 支持的所有表达式:Expression-Based Access Control.
  • 有没有一种方法可以根据用户属性的信息进行过滤?例如,我有一组按文件夹结构组织的 PDF 模板,根据用户组,他们不应该看到某个文件夹下的文件。
【解决方案2】:

没有特别的理由限制对静态资源的访问。

鉴于目录结构定义明确且文件排序是语义化的(即img_resources 文件夹将仅包含图像),您应该允许访问此类资源,甚至完全绕过过滤器以避免通过过滤器的开销链,例如:

<sec:intercept-url pattern="/img_resources" filters="none" />

来自Spring Security tutorial

我们不希望 Spring 处理静态资源 安全的过滤器。为此,您可以添加一个额外的 &lt;http&gt; 仅适用于特定模式的块。这个必须来 在现有块之前,因为它适用于特定模式。如果不 如果提供了模式属性,则该块适用于任何请求。

【讨论】:

  • 没有特别的理由限制对静态资源的访问 并非总是如此。就我而言,我有一组私人的 PDF 模板,不能对互联网公众开放。有人可能会说我应该为此使用文档存储并进行访问控制,但这些资源很少更改,并且与公司徽标等一样是静态的。
猜你喜欢
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 2016-11-26
相关资源
最近更新 更多