Дизайнерское решение для кодирования URL - PullRequest
1 голос
/ 15 сентября 2010

Я планирую переписать / кодировать URL (может быть, лучше переписать термин).Основная цель - скрыть точный URL-адрес от клиента, так как, если он достаточно умен, он может выяснить, как испортить приложение.

Кодировщик URL будет инъективной функцией f(x) = y.Декодер был бы обратной функцией f , скажем, g , такой что g(y) = x.Таким образом, я могу кодировать и декодировать свои URL-адреса.

URL-адрес, такой как:

http://www.myapp.com/servlet/myapp/template/MyScreen.vm/action/MyAction, будет закодирован в виде:*

Неважно, что находится в закодированном URL-адресе, поскольку он непонятен.

Проблема в том, что я не знаю, как управлять URL-адресом, отображаемым браузером.Я использую JBoss в качестве контейнера сервлета и сервлет Turbine в качестве основы веб-приложения.Мне нужен модуль, который получает закодированный URL, декодирует его, передает его в Turbine, затем он изменяет URL ответа, чтобы снова показать закодированный URL.

Предыдущие попытки решить проблему: Я создал фильтр сервлета, но не могу получить доступ к URL, так как фильтр получает ServletRequest, который является реализацией JBoss.Насколько я прочитал, кажется, что фильтр сервлетов не является хорошим выбором для манипулирования URL.

1 Ответ

2 голосов
/ 15 сентября 2010

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

Например, есть сервлет, который будет принимать:

www.myapp.com/enc/uyatsd6787asv6dyuasgbdxuasydgb876876v

Этот сервлет может быть настроен на обработку запросов, которые начинаются с / enc / или какого-либо другого маркера, указывающего, что URL-адрес должен идти к сервлету декодера.Он будет декодирован по URL-адресу:

/servlet/myapp/template/MyScreen.vm/action/MyAction

, а затем внутренне перенаправит на этот URL-адрес в существующем сервлете, используя что-то вроде:

getServletContext().getRequestDispatcher(decoded_url).forward(req, res);
...