Tomcat: Ограничить доступ к локальному хосту для/только одного/webapp
Я запускаю Tomcat 6, чтобы обслуживать несколько веб-приложений, большинство из которых являются общими. Но я хотел бы ограничить доступ только к одному webapp, разрешая соединения только с localhost.
Я могу ограничить доступ для всех webapps, используя клапан в контексте .xml, как описано в:
Но я не могу понять, как ограничить доступ для каждого приложения. Есть ли способ сделать это с помощью моего приложения web.xml? Или добавив дополнительные правила в context.xml?
Спасибо,
-B
Повторное решение:
$ cp /var/lib/tomcat6/conf/context.xml \
/var/lib/tomcat6/conf/Catalina/localhost/my-app-name.xml
$ cat /var/lib/tomcat6/conf/Catalina/localhost/my-app-name.xml
<Context>
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="localhost"/>
... {as previously} ...
</Context>
Ответы
Ответ 1
Вы можете создать индивидуальное приложение context.xml для вас.
Это выдержка из Tomcat doc для контекстной конфигурации:
Контекстные элементы могут быть явно определены:
- В файле
$CATALINA_HOME/conf/context.xml
: информация об элементе Контекста будет загружена всеми веб-серверами.
В файле $CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default
: информация об элементе Context будет загружена всеми веб-серверами этого хоста.
- В отдельных файлах (с расширением
.xml
) в каталоге $CATALINA_HOME/conf/[enginename]/[hostname]/
. В качестве пути контекста будет использоваться имя расширения файла (меньше .xml
). Многоуровневые пути контекста могут быть определены с помощью #
, например. foo#bar.xml
для контекстного пути /foo/bar
. Веб-приложение по умолчанию может быть определено с помощью файла с именем ROOT.xml
.
- Только если файл контекста не существует для приложения в
$CATALINA_HOME/conf/[enginename]/[hostname]/
; в отдельном файле в /META-INF/context.xml
внутри файлов приложения. Если веб-приложение упаковано как WAR, то /META-INF/context.xml
будет скопировано в $CATALINA_HOME/conf/[enginename]/[hostname]/
и переименовано в соответствии с контуром контекста приложения. Как только этот файл существует, он не будет заменен, если новая новая версия WAR с новым /META-INF/context.xml
будет размещена в основной базе приложений.
Ответ 2
Разрешение localhost
не работает для меня. Вместо этого я использую RemoteAddrValve
. Имейте в виду, что некоторые системы используют IPv4-адреса (ваш фильтр должен соответствовать совпадению 127.0.0.1
), в то время как другие используют адреса IPv6 (соответствуют полному адресу, а не сокращенным обозначениям типа ::1
).
<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="0:0:0:0:0:0:0:1,127\.0\.0\.1" />
</Context>
Атрибут allow
принимает регулярное выражение, поэтому точки должны быть экранированы. Как объяснил Дмитрий Негода, это происходит в /META-INF/context.xml
.
Ответ 3
Перейти к следующему пути: C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\Catalina\localhost\
В этом пути вы найдете файл manager.xml.
Отредактируйте файл "manager.xml" со следующим содержимым:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1,10.100.1.2"/>
<!-- Link to the user database we will get roles from
<ResourceLink name="users" global="UserDatabase"
type="org.apache.catalina.UserDatabase"/>
-->
****** сохранить и запустить сервер. У вас это есть.
ПРИМЕЧАНИЕ. 127.0.0.1 СРЕДИ ВАШЕЙ СИСТЕМЫ IP 10.100.1.2 -ЭТО ВАШ ДРУГ