Настройки Tomcat Valve - PullRequest
       21

Настройки Tomcat Valve

7 голосов
/ 03 декабря 2009

Я застрял с какой-то проблемой конфигурации, я думаю. Мне нужно защитить папка, которая находится внутри моего фактического приложения Tomcat от доступа из определенный диапазон IP-адресов.

Я думал, что это serverfault , поэтому я разместил вопрос там . Прямо сейчас я не уверен, так ли это, так или иначе, SF ...

Тем не менее, я продолжал пытаться запустить его сам и решил, что Мне нужно установить

org.apache.catalina.valves.RemoteAddrValve

для этой моей папки. К сожалению, я просто не могу получить то, что мне нужно, чтобы сделать это установка. web.xml, server.xml? Пробовал оба, нулевой успех. Может ли кто-нибудь пожалуйста помоги мне в этом.

ТИА

K

Ответы [ 4 ]

7 голосов
/ 03 декабря 2009

Он должен находиться внутри вашего <Context> элемента в 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>

Просто помните, что строковые значения - это шаблоны регулярных выражений, поэтому специальные символы регулярных выражений (например, точка (.)) Должны быть экранированы обратными слешами.

РЕДАКТИРОВАТЬ : в ответ на комментарий ОП. Я думаю, что вам нужно внедрить FILTER в ваше веб-приложение и настроить его для приема или отклонения запросов на основе их IP-адреса удаленного адреса. Удаленный адрес можно получить из объекта ServletRequest, переданного в метод doFilter.

Вы объявляете фильтр в файле 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>

Прочтите связанную статью о том, что нужно сделать, чтобы принять параметры инициализации. Я думаю, что для принятия решения вы можете безбожно скопировать код из RequestDumperValve.

4 голосов
/ 03 декабря 2009

Вам нужно поместить его в элемент <Context>, который определяет рассматриваемое веб-приложение.

Для Tomcat это может быть несколько мест под каждым веб-приложением (и контролируемым веб-приложением) /META-INF/context.xml или серверным (и управляемым сервером) /conf/[enginename]/[hostname]/context.xml или глобальным /conf/context.xml или серверным специфичный для хоста /conf/server.xml. Также см. Документацию Tomcat Context .

3 голосов
/ 01 июня 2010

Была такая же потребность, как у вас (но по другим причинам) на прошлой неделе, и был создан клапан для блокировки запросов по пути Он основан на org.apache.catalina.valves.RequestFilterValve.

Использование:

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

Клапан может использоваться в Engine, Host или Context так же, как любой клапан, и доступен на GitHub. http://github.com/xlson/tomcat-valves

Я бы предложил использовать клапаны Tomcat по умолчанию или фильтры сервлетов в вашем приложении, если это решит вашу проблему. Причина, по которой нам понадобился нестандартный клапан, заключалась в том, что некоторые части приложения управления tomcat Psi-Probe могли бы «просачиваться», даже если мы использовали RemoteAddrValve в элементе <Context> приложения.

2 голосов
/ 03 декабря 2009

Tomcat Valve может применяться ко всему движку, хосту или определенному контексту (веб-приложение). Вы должны использовать его для всего приложения, а не для конкретного пути или каталогов.

Вы должны установить его в своем META-INF / context.xml или фрагменте своего контекста в каталоге conf / Catalina / [host]. Например,

<Context path="/myapp" ...>
  ...
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="10.1.2.*"/>
</Context>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...