保护servlet应用程序中的内部视图层模板页面

时间:2008-10-01 02:31:34

标签: java architecture servlets

我对Java中的MVC Web应用程序有一个非常基本的问题。

由于原料JSP的古时直到当前的技术,如煤层,一个非常基本的图案一直从最初接受请求给创建输出要被发送到客户端视图层控制器中的内部调度。

通常通过使用URL向servlet容器请求新资源来完成此内部调度(尽管可以通过额外的配置层隐藏该机制)。这些URL的映射由同一个web.xml完成​​,该web.xml还定义了外部的“真实”URL。

除非采取特殊措施,否则通常可以直接直接访问视图层。见证Seam“注册”演示,您可以绕过“register.seam”并直接转到“registered.xhtml”。这是一个潜在的安全问题。至少,它泄漏了视图模板源代码。

我知道这只是一个基本的示例应用程序,但同样奇怪的是,需要采取任何额外措施来声明这些内部资源对外部不可见。

限制网址入口点的最简单方法是什么?

是否有类似“WEB-INF”目录的东西,一个只能由内部请求访问的神奇URL路径组件?

4 个答案:

答案 0 :(得分:3)

您可以使用web.xml部署描述符中的security-constraint来阻止对内部资源的访问。

例如,我使用以下配置来阻止直接访问JSP:

<!-- Prevent direct access to JSPs. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>JSP templates</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint/> <!-- i.e. nobody -->
</security-constraint>

答案 1 :(得分:1)

我不建议允许Internet请求直接访问您的appserver。我会在前面抛出一个网络服务器,然后在其中,允许某些类型的URL请求。不想让人们去foo.com/jsps吗?在那里一劳永逸地限制它。

这里有关于这个主题的一些对话:hiding pages behind WEB-INF?

答案 2 :(得分:1)

处理这种情况的一种方法是构造一个Servlet过滤器,它检查每个请求的请求路径并相应地处理每个请求。这是一个可以帮助您入门的链接JavaServer Pages (JSP) and JSTL - Access control with JSP

答案 3 :(得分:0)

我现在已经看到了几个将其内部JSP放入WEB-INF/jsp的应用程序。这似乎可以解决问题,至少对于JSP和Velocity而言。但它does not seem to work for JSF