Выполнение перезаписи URL в ServletFilter с использованием Jetty

Мне нужно сделать перезапись URL-адреса в ServletFilter, чтобы "foo.domain.com" был переписан в "foo.domain.com/foo". Я использую Jetty, у которого есть удобный способ изменения запросов: просто приведите запрос к объекту Jetty Request, и вы получите набор сеттеров, которые позволят вам изменить его. Вот мой код (который не работает):

String subdom = Util.getSubDomain(req);
org.eclipse.jetty.server.Request jettyReq = (Request) req;
String oldUri = jettyReq.getRequestURI();
String newUri = "/" + subdom + oldUri;
jettyReq.setRequestURI(newUri);

Моя цель - обслуживать файлы из каталога / foo, который находится по адресу /webapps/root/foo.

Я предполагаю, что мне также нужно вызывать такие вещи, как setContextPath(), setPathInfo(), setURI(), setServletPath(), и кто знает, что еще.

Какая волшебная комбинация сделает так, чтобы исходный запрос был для /foo?

Изменить: чтобы уточнить, причина, по которой я говорю, что код не работает, заключается в том, что файлы по-прежнему обслуживаются из / webapps / root, а не /webapps/root/foo.

2 ответа

Решение

Отвечая на мой собственный вопрос: я пропал

jettyReq.setServletPath(newUri); 

Добавьте это, и все работает.

Просто используйте обработчик перезаписи, у нас есть поддержка того, что вы пытаетесь сделать:

http://wiki.eclipse.org/Jetty/Feature/Rewrite_Handler

Другие вопросы по тегам