Je souhaite restreindre l'accès à certaines URL dans ma webapp Tomcat. Seules 3 adresses IP connues doivent être autorisées à accéder aux URL qui correspondent à un certain modèle.
par exemple. http://example.com:1234/abc/personId
Comment puis-je atteindre cet objectif?
Utilisez org.Apache.catalina.filters.RemoteAddrFilter et mappez-le sur l'URL que vous souhaitez protéger. Voir http://Tomcat.Apache.org/Tomcat-7.0-doc/config/filter.html#Remote_Address_Filter pour les détails de configuration.
Vous pouvez le faire avec ceci dans 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.*"
/>
(ce sont de vraies adresses IP: propriétaires, vous savez pourquoi: - |) mais comme vous pouvez le voir c'est vraiment un bloqueur pas un facilitateur. Une meilleure solution serait de placer Apache HTTPD devant lui avec les instructions Deny All et Allow From, qui vous permettront d'autoriser uniquement les 3 adresses IP dont vous avez besoin pour accéder au service.
Vous pouvez utiliser quelque chose comme ça pour bloquer les IPS et si vous êtes derrière un proxy:
<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>
Je ne restreindrais pas l'accès par adresse IP, pour les raisons suivantes:
x-forwarded-for
les en-têtes vont juste avoir l'IP du périphérique passerelle; en faisant confiance à ce que IP approuve tout le monde derrière la passerelle, en supposant à nouveau que vous souhaitiez donner accès à certains clients.Au lieu de cela, si vous devez exécuter un système où certains appels ne sont accessibles qu'à certains utilisateurs, j'utiliserais l'authentification - les certificats SSL côté client fonctionnent assez bien à cette fin. Alternativement, vous pouvez utiliser quelque chose comme OAuth .