#java #servlets #port #wildfly #web.xml
#java #сервлеты #порт #wildfly #web.xml
Вопрос:
У меня есть приложение, которое использует два разных порта, 443 и 4443. Другой предназначен для использования приложения (пользовательского интерфейса), а другой — канал управления для некоторых автоматизированных клиентов.
У меня есть несколько разных сервлетов, настроенных в web.xml . Первый предназначен для использования в пользовательском интерфейсе, для пользователей, которые обычно используют приложение через https-443:
<servlet-mapping>
<servlet-name>application_ui</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
У меня также есть сервлет, отображенный в web.xml который используется только клиентами в порту 4443, пусть этот сервлет будет назван как «client_inlet». Это простая служба прослушивания запросов POST, в которой нет функциональности для пользователей.
<servlet-mapping>
<servlet-name>client_inlet</servlet-name>
<url-pattern>/ClientInlet</url-pattern>
</servlet-mapping>
В настоящее время пользователи могут получить доступ к обоим разделам приложения с обоих портов, 443 и 4443.
Чего я хочу добиться, так это того, что часть приложения client_inlet будет доступна только с использованием порта 4443, а весь трафик 443 будет перенаправлен на application_ui
Я хотел бы сделать что-то вроде следующего (не уверен, возможен ли такой синтаксис в web.xml но, по крайней мере, это не работает):
<servlet-mapping>
<servlet-name>application_ui</servlet-name>
<url-pattern>https://*:443/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>client_inlet</servlet-name>
<url-pattern>https://*:4443/ClientInlet</url-pattern>
</servlet-mapping>
Возможен ли сценарий вообще с использованием web.xml конфигурация? Или это должно быть сделано на стороне сервера приложений? Я использую WildFly 8.1.0, есть идеи, как это должно быть сделано там в standalone.xml ?
Комментарии:
1. Это часть конфигурации сервера приложений или контейнера сервлета, а не
web.xml
2. Итак, вы в основном говорите, что это должно быть сделано в конфигурации wildfly?
3. Я так думаю, да
4. Почему? Что это изменит в вашей жизни?
5. Я хотел бы ограничить доступ к приложению в брандмауэре, используя IP-белый список (443), по-прежнему пропуская весь трафик через порт 4443. И я не хочу, чтобы приложение можно было использовать через порт 4443.
Ответ №1:
Я не думаю, что вы можете сделать это в конфигурации. Поскольку каждый порт — это отдельный сервер, не так ли? В этом случае вам нужно перенаправление на другое местоположение / сервер, а не перенаправление в том же приложении.
Я не вижу другого способа сделать это в коде или приложении.
Использование javax.servlet.Реализация фильтра кажется идеальной для этой задачи. Вам просто нужно проверить, начинается ли path с «/ ClientInlet», затем перенаправить в другое место или просто продолжить запрос. Я не уверен, что правильно понял подробности о перенаправлении, но что-то, как показано ниже, кажется подходящим:
Код фильтра:
String path = request.getRequestURI();
if(path.equals("/ClientInlet"))
{//Redirect the client to the new location i.e. the other port
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", "https://someserver.com:port/ClientInlet");
} else
{//Just forward the request to the servlet
filterChain.doFilter(servletRequest, servletResponse);
}