Как перенаправить http POST с помощью urlrewritefilter

У меня вопрос по поводу urlrewritefilter и до сих пор я ничего не мог найти по этому поводу в сети.

Я хочу перенаправить http POST в Tomcat7. Вот пример...

Вызов представляет собой HTTP POST для ULR, например

http://localhost:8080/oldApplication/Example?a=123&b=2

Этот вызов также содержит некоторый контент в формате xml или json. Фильтр настроен хорошо, так как он работает, и urlrewrite.xml содержит:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">

<urlrewrite use-query-string="true">
    <rule>
        <condition type="method">POST</condition>
        <from>^(.*)$</from>
        <to type="redirect">/newApplication$1</to>
    </rule>
</urlrewrite>

В журнале доступа я вижу, что вызов

http://localhost:8080/oldApplication/Example?a=123&b=2

перенаправляется на

http://localhost:8080/newApplication/Example?a=123&b=2

Ладно пока. Проблема в том, что переписывание изменяет метод, так что новый URL-адрес вызывается с помощью HTTP GET вместо HTTP POST. Я попытался добавить условие к методу, но после перезаписи все равно получил HTTP GET.

Кто-нибудь знает, как настроить rewritefilter, чтобы избежать этого?


person DK6886    schedule 04.09.2013    source источник
comment
Извините... теперь я знаю ответ... перенаправление http-сообщения невозможно   -  person DK6886    schedule 04.09.2013
comment
Вы можете ответить на свой вопрос, просто чтобы закрыть его.   -  person Qben    schedule 16.09.2013


Ответы (1)


Вы используете перенаправление атрибута типа на type="redirect"

Этот атрибут эквивалентен HttpServletResponse.sendRedirect(), который фактически выполняет новый запрос к месту назначения с использованием метода GET, поэтому все параметры теряются вместе с методом HTTP.

Значение по умолчанию для этого атрибута, если оно не указано, равно forward, что эквивалентно HttpServletRequest.getRequestDispatcher(url).forward().

При переадресации будут сохранены все параметры запроса, а также метод HTTP.

Таким образом, чтобы получить желаемый результат, вы должны опустить свой атрибут типа или установить его в forward.

<to>/newApplication$1</to>

or

<to type="forward">/newApplication$1</to>
person Jean Luc    schedule 06.06.2016