web-services - 在哪个 XML 中插入 RemoteAddrValve 过滤器?

标签 web-services tomcat cxf web.xml web-inf

我想限制在 Tomcat 7 下运行的 一个 Web 服务。也就是说,我有一个 Tomcat 7 实例托管多个 Web 服务。其中一些 Web 服务不需要限制到特定的 IP 地址,因此此限制必须针对每个应用。

对该主题的初步搜索表明可以通过 Remote Address Filter 进行搜索通过添加如下内容:

<Context>
  <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="10\.180\.156\.159"/>
  <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
</Context>

在作为部署的 WAR 文件一部分的“某些”XML 文件中。

我的问题是“某些 XML 文件”的命名非常困惑。我的理解是它应该是 context XML 但 context XML 可以命名为任何东西......(它看起来像 <param-name>contextConfigLocation</param-name> 中的 <context-param> in web.xml 决定名称)

因此,在提供实现此限制的提示的各种来源中,引用资料是:

我的上下文 XML 名为 beans.xml位于 WEB-INF/classes子文件夹...

有人可以澄清这个问题吗?

我现在要用我自己的猜测进行实验,但最好有权威的答案。

最佳答案

如果您只想将 Valve 包含在一个应用程序中,您可以在 <Context/> 中执行此操作堵塞。正如您所发现的,您可以在几个不同的地方配置上下文。下面对它们进行解释。

META-INF/context.xml (my WAR has no META-INF subfolder, only WEB-INF)

这是唯一可以从您的应用程序配置上下文的地方。如果你想这样做,只需在项目的根目录中创建一个 META-INF 文件夹(与 WEB-INF 目录相同的位置)。在 META-INF 中,创建一个 context.xml 文件并将您的应用程序特定配置放在那里。

当您的应用程序部署到 Tomcat 时,此上下文文件将(如果 Tomcat 配置为这样做,请参阅 copyXML ),将文件复制到 $CATALINA_BASE/conf/Catalina/localhost/<app-name>.xml 中并将其添加到配置中。

conf\Catalina\localhost\manager.xml (looks tomcat-wide, not per-app)

实际格式应该是$CATALINA_BASE/conf/[enginename]/[hostname]/[appname].xml其中 [enginename]默认为 'Catalina' 和 [hostname]默认为“本地主机”。因此,对于“经理”应用程序,您列出的路径是正确的。如果您的应用程序名为“myapp”,那么您将使用 conf/Catalina/localhost/myapp.xml或者对于 ROOT 应用程序,您将使用 conf/Catalina/localhost/ROOT.xml .

这是您可以放置​​应用程序特定上下文配置的第二个位置,也是我推荐的位置。

还有两个地方可以配置Context,一个是conf/context.xml另一个是conf/server.xml .不要使用 conf/context.xml在这种情况下,因为它会在服务器范围内应用(即在您的所有应用程序中)。 conf/server.xml可以使用,但我建议不要使用。使用conf/server.xml不鼓励像这样的配置,主要是因为它不灵活,并且在您进行更改时需要完全重启服务器。

引用...

WEB-INF/web.xml (I do have that file, but it is the file that points to the context XML, not the context XML itself)

这不能用于上下文配置,但您可以使用它来配置 Servlet 过滤器和 Tomcat 附带一个 RemoteAddressFilter ,它的功能与 RemoteAddressValve 相同。

通常建议使用 Filter(如果可用)而不是 Valve。

My context XML is named beans.xml and is located in the WEB-INF/classes subfolder...

您不能为上下文配置使用自定义名称或位置。它需要匹配 Tomcat 指定的名称和位置之一。有关这方面的更多详细信息,请参阅 here .

关于web-services - 在哪个 XML 中插入 RemoteAddrValve 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102104/

相关文章:

java - Apache CXF 发送自定义响应,中止拦截器链

iphone - 我们如何在 iPhone 中处理动态 Web 服务?

c# - 异步 Web 服务调用是否始终调用 AsyncCallback?

c# - 无法从网络服务访问公共(public)类(class)

MYSQL auto_increment 从两个外键插入语句

spring - JBoss 6 + Spring 3.0.5 + JAX-WS/CXF

java - 如何使用 Apache CXF 表示没有时区的日期?

java - jax-ws web 服务在 websphere 8.5 中不起作用

tomcat - 部署 war 时如何告诉tomcat冗长

html - 如何使用 jdbc、servlets 和 html 将文件远程上传到 MySQL 数据库