Выполнение перезаписи 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);
Добавьте это, и все работает.
Просто используйте обработчик перезаписи, у нас есть поддержка того, что вы пытаетесь сделать: