在web.xml之外定义<security-constraint>(例如服务器范围)</security-constraint>

时间:2013-08-14 21:27:45

标签: security tomcat tomcat7 security-constraint

我想对部署在Tomcat7服务器上的所有webapp应用安全性约束。为此,我设置了一个Realm和Valve。我的理解是,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应用程序中定义安全约束?

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

我确实看到了另一个similar question,但我正在尝试在Tomcat配置中找到一种方法,而不必使用代码库中的Servlet API(已经编写)。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

正如人们所料,它是根元素,是web-app,内容被添加到每个已部署的Web应用程序(如每个上下文的context.xml),添加security-constraint工作。

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