2013-12-15 70 views
0

从网络应用程序中,很容易将编程逻辑放在浏览视图上,但是如何阻止用户直接进入jsp页面?如何保护对webapp目录/文件夹的访问?

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

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

很容易的

但如何让用户从输入到网页浏览器的直接路径资源 例如:

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

问题:

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

回答

4

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

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

+0

够简单。谢谢 – stackoverflow

2

我想提供一些建议。不要将JSP视为用户访问的页面。 JSP不是一个静态的HTML页面。 JSP是动态呈现HTML的一种方式。

如果你做了什么JB Nizet建议你将永远不会有担心JSP渲染什么,除非它通过应用程序的入口点去了。由于您控制了这些入口点,即。 servlet,过滤器,控制器等,您可以决定如何呈现响应。

正确编程您的URL映射。试图访问

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

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

+0

感谢您花时间解释这一点。我注意到斯普林斯的方法;使用Spring-Security。但我认为有一种使用应用服务器本身的策略。回到'JB Nizet'的建议,如果你把所有东西都放在WEB-INF目录下,那么你就有从视图本身查找资源的问题(例如:< - 这永远找不到)如果这些资源总是直接访问?或者应该仅限于当用户具有正确的授权/认证以使用那些资源到达该页面时? – stackoverflow

+1

@stack JB Nizet说的是你不能执行'',因为这会告诉浏览器客户端在'yourhost.com/WEB/images/stuff.png'和'WEB/images/stuff .png'不是可访问的URL(除非将其映射到某个Servlet或Controller)。在Spring中,您可以注册一个静态资源处理程序,并将所需的规则放在适当的位置。通常这些资源将是'css','js'或图像文件,因此认证并不适用。 –