7 votes

Paramètres de la valve Tomcat

Je suis coincé par une sorte de problème de configuration, je pense. J'ai besoin de protéger un dossier qui est dans mon application tomcat actuelle de l'accès à partir de une certaine plage d'adresses IP.

Je pensais que c'était défaut du serveur J'ai donc posté la question . Pour l'instant, je ne sais pas si c'est SO ou SF de toute façon...

Néanmoins, j'ai continué à essayer de le faire fonctionner par moi-même et je me suis dit que je devais régler le

org.apache.catalina.valves.RemoteAddrValve

pour mon dossier. Malheureusement, je n'arrive pas à trouver l'endroit où je dois faire ce réglage. web.xml, server.xml ? J'ai essayé les deux, sans succès. Est-ce que quelqu'un pourrait m'aider sur ce point.

tia

K

7voto

Alexander Pogrebnyak Points 24964

Il doit être placé dans votre <Context> dans le fichier server.xml :

<Context
    path="/tcadmin"
    docBase="${catalina.home}/server/webapps/admin"
    privileged="true"
>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127\.0\.0\.1"
    />
</Context>

N'oubliez pas que les valeurs de chaîne sont des motifs de regex, et que les caractères spéciaux de regex (par exemple, point(.)) doivent être échappés par des antislashes.

EDITAR : en réponse au commentaire de l'OP. Je pense que vous devez implémenter un FILTRE dans votre application web et configurez-la pour qu'elle accepte ou rejette les requêtes en fonction de l'adresse IP distante. L'adresse distante peut être récupérée à partir de ServletRequest passé dans doFilter méthode.

Vous déclarez un filtre dans votre fichier web.xml :

<filter>
  <filter-name>GatekeeperFilter</filter-name>
  <filter-class>your.package.GatekeeperFilter</filter-class>
  <init-param>
    <param-name>allowedNetwork</param-name>
    <param-value>192\.168\.2\.*</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>GatekeeperFilter</filter-name>
  <url-pattern>/path/to/protected/folder</url-pattern>
</filter-mapping>

Lisez l'article en lien sur ce qui doit être fait pour accepter les paramètres init. Je pense que pour votre prise de décision, vous pouvez copier sans vergogne le code de la RequestDumperValve.

4voto

BalusC Points 498232

Vous devez le mettre dans le <Context> qui définit la webapplication en question.

Pour Tomcat, il peut s'agir de plusieurs endroits, sous chacun d'entre eux, les paramètres spécifiques à la webapp (et contrôlés par la webapp) /META-INF/context.xml ou l'option spécifique au serveur (et contrôlée par le serveur) /conf/[enginename]/[hostname]/context.xml ou de la globale du serveur /conf/context.xml ou l'option spécifique à l'hôte /conf/server.xml . Voir aussi le Documentation sur le contexte Tomcat .

4voto

ZZ Coder Points 36990

La valve Tomcat peut être appliquée à l'ensemble du moteur, à l'hôte ou à un contexte spécifique (webapp). Vous devez l'utiliser pour l'ensemble de votre application, et non pour des chemins ou des répertoires spécifiques.

Vous devez le définir dans votre META-INF/context.xml ou votre fragment de contexte dans le répertoire conf/Catalina/[host]. Par exemple,

<Context path="/myapp" ...>
  ...
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="10.1.2.*"/>
</Context>

3voto

xlson Points 1249

J'ai eu le même besoin que vous (mais pour d'autres raisons) la semaine dernière et j'ai créé une valve pour bloquer les demandes par chemin. Elle est basée sur org.apache.catalina.valves.RequestFilterValve .

Utilisation :

<Valve className="se.qbranch.tomcat.valve.BlockAccessByPathValve" path="/manager/.*" allow="127\.0\.0\.1"/>

La valve peut être utilisée dans le moteur, l'hôte ou le contexte comme n'importe quelle valve et est disponible sur GitHub. http://github.com/xlson/tomcat-valves

Je vous suggère d'utiliser les valves par défaut de Tomcat ou les filtres de servlets dans votre application si cela résout votre problème. La raison pour laquelle nous avions besoin d'une valve personnalisée était que certaines parties de l'application de gestion de tomcat Psi-Probe s'échapperait, même si nous avons utilisé l'option RemoteAddrValve dans le <Context> de l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X