首页 > 解决方案 > 阻止tomcat webapp上的特定瓮

问题描述

有一个特定的需求,我们需要在网络应用程序下阻止特定的骨灰盒 例如,我们有一个网络应用程序 /siebel ,在它 /siebel/app/ 下这应该可以工作,但 /siebel/smc 不应该

尝试在 /META-INF 文件夹 context.xml 下提供上下文路径

<Context path="/siebel/smc" debug="0" privileged="true">
 <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
  allow="127.0.0.1"/>
</Context>

也试过

<Context antiJARLocking="true" path="/siebel/smc">
 <Valve className="org.apache.catalina.valves.RemoteIpValve" />
 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1" />
</Context>

这最终会阻止 URL /siebel/smc 和 /siebel/app

也尝试在 server.xml 中添加上下文路径,结果相同。使用 deny="*" 使用拒绝选项,但仍然相同。

有没有办法处理这个?

谢谢

标签: tomcat

解决方案


好吧。您有正确的想法,但将其应用在错误的位置。META-INF/context.xml仅适用于它所在的 Web 应用程序,并且忽略 path 属性(路径将从 WAR/dir 名称派生)。

我假设您在webapps/siebel.waror部署了一个 Web 应用程序,webapps/siebel并且该 Web 应用程序的上下文路径是“/siebel”。

我们将利用 Servlet 规范的要求,即在将 URI 与 Web 应用程序、过滤器和 servlet 匹配时,第一步是通过查找最长匹配上下文路径来选择 Web 应用程序。因此,如果我们部署一个新的 Web 应用程序/siebel/smc并阻止所有访问,这应该会产生您想要的效果。

假设默认的 Tomcat 安装(引擎和主机名不变)将以下内容放在$CATALINA_BASE/conf/Catalina/localhost/siebel#smc.xml

<Context>
  <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny=".*"/>
</Context>

您还需要创建空目录$CATALINA_BASE/webapps/siebel#smc


推荐阅读