2

我想对部署在 Tomcat7 服务器上的所有 webapps 应用安全约束。为此,我设置了一个领域和阀门。我的理解是,context.xml 的内容包含在部署到服务器的所有应用程序中——这部分似乎可以工作,因为我可以添加各种配置,并且我看到了它包含在各种部署的应用程序上下文中的效果。它非常适合在 Web 应用程序中强制执行一致性。

似乎不起作用的是尝试在 web.xml 之外定义如下安全约束:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>myServletWAR</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>my_role</role-name>
    </auth-constraint>
</security-constraint>

我在 Context 标签之间的 context.xml 中执行此操作。没有来自 Tomcat 的投诉,但没有应用安全约束,例如我可以在没有密码的情况下点击应用程序。在 context.xml 中使用上面的约束,我看到:

Aug 14, 2013 3:03:32 PM org.apache.catalina.authenticator.AuthenticatorBase invoke
FINE:  Not subject to any constraint

...在日志中,并且可以在没有身份验证的情况下访问“受保护”资源。

当然,将相同的约束移动到 webapps 的 web.xml 会产生预期的约束行为,但我需要确保在给定服务器上的所有已部署应用程序中一致地应用约束。

安全约束是否需要在网络应用程序内部?如果确实如此,如果不在 context.xml 中,我如何在多个(尚未部署的)Web 应用程序中定义安全约束?

正是我想要设置的,但我想在 web.xml 之外(上面)强制执行约束。同样,这样它对于整个服务器都是一致的。

我确实看到了另一个类似的问题,但是我试图在 Tomcat 配置中找到一种方法来执行此操作,而不必使用代码库中的 Servlet API(已经编写好了)。

谢谢!

4

1 回答 1

1

在我发布我的问题后的第二个,我意识到:

$CATALINA_BASE/conf/web.xml是我一直在寻找的答案。

正如人们所期望的那样,它的根元素是 web-app,并且内容被添加到每个部署的 web 应用程序(如context.xml每个上下文)中,添加了security-constraint工作。

我确实必须重新启动 Tomcat(它显然不会自动部署该文件中的更改),但这不是问题,因为这不应该在生产中改变。

于 2013-08-14T21:44:08.607 回答