我想限制对Tomcat webapp中某些网址的访问。 只允许3个已知IP地址访问符合特定模式的URL。
e.g。 http://example.com:1234/abc/personId
我怎样才能做到这一点?
答案 0 :(得分:12)
使用org.apache.catalina.filters.RemoteAddrFilter并将其映射到您要保护的URL。有关配置详细信息,请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_Address_Filter。
答案 1 :(得分:4)
您可以在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.*"
/>
(这些是真正的IP地址:所有者,你知道为什么: - |)但你可以看到它真的是一个阻止者而不是一个推动者。更好的解决方案是使用Deny All和Allow From语句将Apache HTTPD放在它前面,这样您就只允许访问该服务所需的3个IP地址。
答案 2 :(得分: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>
答案 3 :(得分:0)
我不会通过IP地址限制访问,原因如下:
x-forwarded-for
标头的网关设备后面的客户将只拥有网关设备的IP;相信IP信任网关背后的所有人,再次假设您可能希望为某些客户提供访问权。相反,如果您需要运行一个系统,其中某些调用只能由某些用户访问,我会使用身份验证 - SSL客户端证书可以很好地用于此目的。或者,您可以使用类似OAuth的内容。