如何使用Tomcat限制IP地址访问?

31

有人知道Tomcat是否可以通过IP地址限制对某些应用程序的访问(就像Apache的.htaccess)吗?

5个回答

27

您可以在context.xml中添加一个Valve(具体地说是org.apache.catalina.valves.RemoteAddrValve)到Context中。请参阅关于远程主机过滤器的文档。


26
这是一个例子:
在apache-tomcat-7.0.33\conf\server.xml中:
<Engine name="Catalina" defaultHost="localhost">
    ...
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
           allow="10\.132\.77\.55|10\.132\.76\.120|10\.132\.77\.47"/>
    ...
</Engine>

配置文件也可以在这些目录中:'/etc/tomcat8/server.xml'。 - user3338098
这也可以用于保护管理器和主机管理器的访问。 - Waleed Abdalmajeed

5
在Tomcat 7中,您可以在web.xml中进行配置。
如果是所有Web应用程序的配置,则可以在tomcat7/conf/web.xml中进行配置;如果只是针对一个Web应用程序的配置,则可以在tomcat7/webapps/$(WEB_APP)/WEB-INF/web.xml中进行配置,非常方便。
该配置使用了RemoteAddrFilter过滤器,在容器提供的过滤器中有一个示例。

2

如果您想对特定的IP地址限制您的Web应用程序的访问权限,请在/opt/tomcat/webapps/{web-application name}/META-INF/context.xml文件中添加以下字符串:

<Context antiJARLocking="true" path="/">
 <Valve className="org.apache.catalina.valves.RemoteIpValve" />
 <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="{IP_address}" />
</Context>

这里是通过 Jelastic 面板进行操作的指南。请确保重启 Tomcat 以使更改生效。


谢谢。我一直在寻找如何仅限制单个Web应用程序的访问权限。通过将“ROOT”替换为该特定Web应用程序,它起作用了。感谢您指向这个很棒的资源! - Simon Baars
顺便提一下(对于所有尝试此方法的人),您必须重新启动Tomcat实例才能使IP限制生效。此外,您可以将“deny”替换为“allow”,以仅允许特定的IP,而不是仅阻止某些IP。 - Simon Baars
非常感谢!对于8.5.37版本,只有这个解决方案有效。不幸的是,所有其他解决方案都缺少RemoteIpValve语句。 - Md.

0
在Tomcat 9中,您可以在路径apache-tomcat-9.0.14\webapps\manager\META-INF\context.xml中进行配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接