我想对部署在Tomcat7服务器上的所有Web应用程序应用安全性约束。为此,我建立了一个领域和阀门。我的理解是,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会产生预期的约束行为,但是我需要确保在给定服务器上的所有已部署应用程序中一致地应用约束。
安全约束是否 需要 在Web应用程序内部?如果可以,如何不在context.xml中跨多个(已部署的)Web应用程序定义安全约束?
这正是我要设置的内容,但是我想在web.xml外部(上方)强制执行约束。再次,以便整个服务器保持一致。
我确实看到了另一个类似的问题,但是我试图找到一种在Tomcat配置中执行此操作的方法,而不必使用代码库(已编写)中的Servlet API。
谢谢!
我发表问题后的第二个小时,我意识到:
$CATALINA_BASE/conf/web.xml 是我一直在寻找的答案。
$CATALINA_BASE/conf/web.xml
正如人们所期望的那样,它是Web应用程序的根元素,并且内容被添加到每个已部署的Web应用程序中(就像context.xml每个上下文一样),从而增加了security-constraint工作量。
context.xml
security-constraint
我确实必须重新启动Tomcat(显然它不会自动部署该文件中的更改),但这不是问题,因为这在生产中不应更改。