Я пытался проверить свое первое веб-приложение. Использование Tomcat 7.Переадресация на другой webapp с аутентификацией
Я хочу переслать с хоста: port/app1/x/y с некоторыми сообщениями и заголовками аутентификации на хост: port/app2/x/y с теми же данными сообщения и заголовками. Оба приложения находятся на одном хосте.
/app2 имеет базовую аутентификацию. На стороне клиента код идет
method.addRequestHeader("Authorization",
"Basic " + new String(Base64.encodeBase64(userNPasswd.getBytes())));
Я могу переслать из/App1 в/app2, выполнив следующие действия
1) Реализация фильтра и делать это в doFilter в/app1
ServletContext othercontext = filterConfig.getServletContext().getContext("/app2");
RequestDispatcher dispatcher = othercontext.getRequestDispatcher(req.getRequestURI().replace("/app1", ""));
dispatcher.forward(request, response);
2) В App1 .. под WEB-INF/web.xml вперед все (/ *) URL отображения
<filter>
<filter-name>ForwardFilter</filter-name>
<filter-class><my.package.filter.ForwardFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ForwardFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3) Во в котом конфе/server.xml .. Определение контекста как для/App1 и/app2 при том же хосте и выключая распакуйте войны и т.д., и имеющее crossContext = истинный
<Context path="/app1" docBase="app1" crossContext="true" />
<Context path="/app2" docBase="app2" crossContext="false" />
app1.war действительно просто с только один класс фильтра и web.xml, который отображается на перенаправлять запросы
app2.war родник включен веб-приложение
Когда я непосредственно сделать запрос/app2 с неправильным паролем, я получаю ошибку
Когда я переправляю путь вперед (от/app1 до/app2), он пропускает аутентификацию и обработку начала запроса в/app2. Она терпит неудачу с NPE, когда в каком-то месте в/app2 .. он пытается читать имя пользователя из контекста безопасности (весна, как ожидается, удар и установить это)
SecurityContextHolder.getContext().getAuthentication().getName();
Я не могу изменить код под/app2
Я хотел бы/APP1 быть очень простым запросом вперед ..
я не могу использовать перенаправление или использовать правило апача переписывает перед котом
Пожалуйста, дайте мне знать, если какая-либо дополнительная информация должен быть разделена
Переадресация также пересылает все заголовки проверки подлинности, так что, как будто запрос hit/app2 напрямую?
Спасибо, это спасло меня! –