Spring 如何保护对webapp目录/文件夹的访问?

Spring 如何保护对webapp目录/文件夹的访问?,spring,web-applications,resources,restriction,Spring,Web Applications,Resources,Restriction,在web应用程序中,很容易通过编程方式将逻辑放在访问视图上,但是如何阻止用户直接访问jsp页面本身呢 示例 @RequestMapping("/SomeView") public void goToSomeView{ if(logicIsNotSatisfied) return new ModelAndView("failure"): else return new ModelAndView("welcome"); } 很容易 但如何防止用户在web浏览器中键入资源的直接

在web应用程序中,很容易通过编程方式将逻辑放在访问视图上,但是如何阻止用户直接访问jsp页面本身呢

示例

@RequestMapping("/SomeView")
public void goToSomeView{

 if(logicIsNotSatisfied)
    return new ModelAndView("failure"):
 else
    return new ModelAndView("welcome");
}
很容易

但如何防止用户在web浏览器中键入资源的直接路径 例如:

http://mydomain/myWebApp/resouces/stuff.png
问题:

http://mydomain/myWebApp/resouces/stuff.png

我们如何限制用户直接访问webapp目录?

将JSP放在WEB-INF下,从外部无法访问它们。请注意,直接访问它们不应该是一个大问题,因为如果视图访问的所有数据都不可用,那么用户将得到一个错误或一个空页面,因为控制器没有被调用


关于静态资源,如果您不希望用户能够在没有访问控制的情况下访问它们,那么也可以将它们放在WEB-INF下,或者放在webapp目录之外,并通过一个控制器来访问它们,该控制器检查用户是否可以访问它们,读取它们,并将它们写入响应。

将JSP放在WEB-INF下,从外面是无法接近的。请注意,直接访问它们不应该是一个大问题,因为如果视图访问的所有数据都不可用,那么用户将得到一个错误或一个空页面,因为控制器没有被调用


关于静态资源,如果您不希望用户能够在没有访问控制的情况下访问它们,那么也可以将它们放在WEB-INF下,或者放在webapp目录之外,并通过一个控制器来访问它们,该控制器检查用户是否可以访问它们,读取它们,并将它们写入响应。

我想给出一些建议。不要认为JSP是用户访问的页面。JSP不是静态HTML页面。JSP是一种动态呈现HTML的方法

如果您按照建议执行操作,您将永远不必担心JSP呈现任何内容,除非它通过应用程序的入口点。由于您控制这些入口点,即servlet、过滤器、控制器等,因此您可以决定如何呈现响应

适当地编程URL映射。试图访问的用户

http://mydomain/myWebApp/resouces/stuff.png

如果他们通过了适当的过滤器,就不必获取静态图像资源
stuff.png
。你完全可以阻止访问。

我想给你一些建议。不要认为JSP是用户访问的页面。JSP不是静态HTML页面。JSP是一种动态呈现HTML的方法

如果您按照建议执行操作,您将永远不必担心JSP呈现任何内容,除非它通过应用程序的入口点。由于您控制这些入口点,即servlet、过滤器、控制器等,因此您可以决定如何呈现响应

适当地编程URL映射。试图访问的用户

http://mydomain/myWebApp/resouces/stuff.png

如果他们通过了适当的过滤器,就不必获取静态图像资源
stuff.png
。您可以很好地阻止访问。

感谢您花时间解释这一点。我注意到春天的来临;使用Spring安全性。但我认为使用应用服务器本身是有策略的。回到
JB Nizet
suggestion,如果您将所有内容都放在WEB-INF/目录下,那么您就无法从视图本身定位资源(即@stack JB Nizet所说的是,你不能执行
,因为这会告诉浏览器客户端在
yourhost.com/WEB/images/stuff.png
上执行GET请求,并且
WEB/images/stuff.png
不是一个可访问的URL(除非你将它映射到某个Servlet或控制器)。在Spring中,您可以注册一个静态资源处理程序,并将您想要的规则放在适当的位置。通常这些资源将是
css
js
或图像文件,因此身份验证并不真正适用。感谢您花时间解释这一点。我注意到Spring的方法;使用Spring安全性。但我认为有一个策略是返回到
JB Nizet
建议,如果您将所有内容都放在WEB-INF/目录下,那么您就无法从视图本身定位资源(即@stack JB Nizet所说的是,你不能执行
,因为这会告诉浏览器客户端在
yourhost.com/WEB/images/stuff.png
上执行GET请求,并且
WEB/images/stuff.png
不是一个可访问的URL(除非你将它映射到某个Servlet或控制器)。在Spring中,您可以注册一个静态资源处理程序,并将您想要的规则放在适当的位置。通常这些资源是
css
js
或图像文件,因此身份验证并不真正适用。