Функциональность в масштабах сервера для нескольких веб-приложений

Мне нужно выполнить предварительную и последующую обработку всех входящих запросов к веб-серверу. Функциональность заключается как в ограничении доступа на уровне url и переводе языка, так и в других особых случаях, которые должны обрабатываться глобально.

Обычно этого можно достичь с помощью фильтров сервлетов, но когда количество веб-приложений растет, становится желательным не связывать фильтры с каждым приложением, поскольку все приложения должны быть перестроены и развернуты заново при внесении изменений в фильтр.

Вместо этого я хотел бы установить фильтры глобально на сервере, и я нашел два возможных решения, ни одно из которых меня не устраивает.

  1. На Tomcat можно установить фильтры на весь сервер в директории "lib" и настроить серверный web.xml для сопоставления их с входящими запросами. Проблема, которую я вижу, заключается в том, что любые зависимости фильтров также должны быть развернуты глобально в каталоге lib. Насколько я понимаю, это может вызвать трудноразрешимые конфликты зависимостей с установленными приложениями. (Загружает ли Tomcat один и тот же библиотечный файл в память дважды, если он находится в двух веб-приложениях?)

  2. Развертывание фильтров в простом веб-приложении, которое в основном работает как прокси, по крайней мере, свяжет фильтры с соответствующими зависимостями. Затем это приложение может быть развернуто на сервере и принимать все входящие запросы, а затем пересылать их целевому приложению с помощью параметра crossContext config. (RequestDispatcher forward between Tomcat instances) Однако это требует изменения урлов так, чтобы все ссылки указывали на "прокси".

Ни одно из этих решений не кажется удовлетворительным. Они оба зависят от платформы, поскольку полагаются на Tomcat. Кроме того, оба они, похоже, имеют возможные проблемы и требуют специальной обработки зависимостей.

Какова наилучшая практика при использовании функциональности на уровне сервера?

6
задан Community 23 May 2017 в 12:01
поделиться