15

我想限制对我的 Tomcat webapp 中某些 URL 的访问。应该只允许 3 个已知 IP 地址访问符合特定模式的 URL。

例如http://example.com:1234/abc/personId

我怎样才能做到这一点?

4

4 回答 4

12

使用 org.apache.catalina.filters.RemoteAddrFilter 并将其映射到您希望保护的 URL。有关配置详细信息,请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_Address_Filter

于 2012-05-08T12:27:25.427 回答
4

You can do that with this in server.xml:

 <Valve
    className="org.apache.catalina.valves.RemoteAddrValve"
        deny="117.40.83.*,122.224.95.*,119.255.28.*,218.8.245.*,218.85.139.*,219.117.197.*,124.89.39.*,58.18.172.*,180.153.225.*"
        />

(these are real IP addresses: owners, you know why :-|) but as you can see it is really a blocker not an enabler. A better solution would be to put Apache HTTPD in front of it with Deny All and Allow From statements, which will let you allow only the 3 IP addresses you need to access the service.

于 2012-05-08T12:21:38.797 回答
3

你可以使用这样的东西来阻止 ips,如果你在代理后面:

<Context path="/manager" docBase="manager" reloadable="true" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteIpValve"/>
  <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="<your IP regex>"/>
</Context>
于 2012-10-11T15:37:24.093 回答
0

我不会通过 IP 地址限制访问,原因如下:

  • 这样做说内部地址,例如 10.0.0.0/24,意味着您隐含地信任整个范围。如果它被破坏会发生什么?
  • 并非所有客户都能够或将能够获得静态 IP 地址 - 假设您可能希望允许某些客户访问。
  • 代理不支持x-forwarded-for标头的网关设备后面的客户将只拥有网关设备的 IP;信任 IP 信任网关后面的每个人,再次假设您可能希望为某些客户提供访问权限。

相反,如果您需要运行一个系统,其中某些调用只能由某些用户访问,我会使用身份验证 - SSL 客户端证书为此目的工作得很好。或者,您可以使用类似OAuth的东西。

于 2012-05-08T12:16:39.907 回答