第一点,基于 DNS 主机名过滤请求是“昂贵的”。它强制 tomcat 进行反向 DNS 查找。当请求出现时,它不带有 DNS 名称,而只是客户端的 IP 地址。因此,tomcat 必须向系统询问与客户端 IP 地址对应的名称(或名称)。
如果您想接受来自特定主机名的请求,您可能已经知道与主机名对应的 IP 地址(或 IP 地址范围)。如果是这样,那么您可以使用Remote Address Filter 为其设置所需的值(IP 地址)。
第二点,使用Remote Address Filter 提供了两个属性allow 和deny 的灵活性。
示例:
注意:此处使用的 IP 地址仅作为示例。
假设有一个主机名myhostname,IP 地址范围为134.87.13.0 - 134.87.13.255。
您只想允许此范围并拒绝所有其他范围。
您将为此范围进行 DNS 查找。说如果你找到它为164.32.90.100。
然后您将 Valve 配置为:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="164\.32\.90\.100, 134\.87\.13\.\d{1,3}" />
现在假设在范围内,您要拒绝子范围134.87.13.51 - 134.87.13.60。
然后您将 Valve 配置为:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="164\.32\.90\.100, 134\.87\.13\.\d{1,3}" deny="134\.87\.13\.(5[1-9]|60)" />
可以使用正则表达式为allow 和deny 配置动态值。
这些细节能否帮助您解决问题。
已编辑
最后一点,如果您允许/拒绝 IP 地址范围,则不得拒绝来自“localhost”的请求。所以将127\.0\.0\.1 添加到您的允许范围内。