【问题标题】:Define a <security-constraint> outside of web.xml (e.g. server-wide)在 web.xml 之外定义一个 <security-constraint> (例如服务器范围)
【发布时间】:2013-08-17 01:09:25
【问题描述】:

我想为部署在 Tomcat7 服务器上的所有 webapp 应用安全约束。为此,我设置了一个领域和阀门。我的理解是,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(已编写)。

谢谢!

【问题讨论】:

  • 当我提交时它击中了我 - $CATALINA_HOME/conf/web.xml 可能是我想要的。如果是这种情况,将进行测试并关闭并记录。

标签: security tomcat tomcat7 security-constraint


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2012-09-26
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多