在网络应用程序中,很容易将逻辑放在程序上访问视图,但是如何阻止用户直接进入jsp页面呢?
示例
@RequestMapping("/SomeView")
public void goToSomeView{
if(logicIsNotSatisfied)
return new ModelAndView("failure"):
else
return new ModelAndView("welcome");
}
足够简单
但是如何防止用户在Web浏览器中键入资源的直接路径 例如:
http://mydomain/myWebApp/resouces/stuff.png
问题:
我们如何限制用户无法直接访问webapp的目录?
答案 0 :(得分:4)
将JSP放在WEB-INF下,并且无法从外部访问它们。请注意,直接访问它们不应该是一个大问题,因为所有用户都会得到一个错误或一个空页面,因为视图访问的所有数据都不可用,因为控制器还没有调用
关于静态资源,如果您不希望用户能够在没有访问控制的情况下访问它们,那么也将它们放在WEB-INF下或webapp目录之外,并通过控制器访问它们,该控制器检查用户可以访问它们,读取它们并将它们写入响应。
答案 1 :(得分:2)
我想提一些建议。不要将JSP视为用户访问的页面。 JSP不是静态HTML页面。 JSP是一种动态呈现HTML的方法。
如果您执行JB Nizet建议,除非经过应用程序的入口点,否则您将永远不必担心JSP呈现任何内容。既然你控制了这些入口点,即。 servlet,过滤器,控制器等,您可以决定如何呈现响应。
正确编程您的URL映射。用户试图访问
http://mydomain/myWebApp/resouces/stuff.png
如果经过适当的过滤器,则不一定必须获取静态图像资源stuff.png
。你可以很好地阻止访问。