Фильтр URLRewrite не работает с составной формой

#java #forms #url-rewriting #multipart #tuckey-urlrewrite-filter

#java #формы #url-перезапись #составная #tuckey-urlrewrite-filter

Вопрос:

Я использую tuckey URLRewrite filter, имеющий одно из его правил следующим образом:

 <rule>
    <name> Proxy  URL with jession ID's </name>
    <note>

    </note>
    <condition type="parameter" name="ParamName">[p{ASCII}] </condition>
    <from>^/([^?]*).htm(.*)

lt;/from>
<to type="proxy">%{request-url};jsessionid=%{parameter:ParamName}$2</to>
</rule>

Проблема возникает, как только я добавляю enctype="multipart/form-data" в свою форму (которая использует метод POST кстати). Фильтр не может перезаписать url.

Есть идеи, как решить эту проблему?

Комментарии:

1. Какую ошибку вы получаете?

2. из регулярного выражения не сопоставляется, и правило перезаписи не работает

3. Ваша проблема в том, что вы не можете получить хранилища полей ввода через POST?

4. Помните, что кодировка Enctype имеет application или multipart / form-data …… В общем, я считаю, что enctype должен сопровождаться тегом ВВОДА, включает ли ваша страница формы? Если это так, вы должны вставить оставшуюся часть. Но на данный момент я бы попытался придерживаться application/x-www-form-urlencoded , если у вас нет ввода.

Ответ №1:

Если вы можете изменить источник приложения, вы можете изменить его так, чтобы вы могли использовать метод «parameter» для извлечения JSESSIONID. По умолчанию (по крайней мере, в Tomcat) идентификатор JSESSIONID не будет передан в сообщении формы, но вы можете изменить свою форму, чтобы включить его. Например, страница JSP может выглядеть следующим образом:

 <form action="index.jsp" method="post">
    <input type="hidden" name="JSESSIONID" value="${pageContext.session.id}"/>
    <input type="submit"/>
</form>
 

В качестве альтернативы вы можете попытаться извлечь JSESSIONID из файла cookie сеанса, используя другое условие. Я не пробовал следующее, но представьте, что что-то подобное может сработать для вас:

 <rule>
    <name>Proxy URL with jsession ID's</name>
    <note></note>
    <condition type="cookie" name="JSESSIONID"/>
    <from>^/([^?]*).htm(.*)

lt;/from>
<to type="proxy">%{request-url};jsessionid=%{cookie:JSESSIONID}$2</to>
</rule>

Существуют и другие условия, которые вы потенциально могли бы использовать для проверки того, был ли идентификатор сеанса действительным (запрошенный идентификатор сеанса-действительный), получен из файла cookie (запрошенный идентификатор сеанса-из-cookie) или получен из URL-адреса действия post (запрошенный идентификатор сеанса-из-url).

Я не уверен, какую версию UrlRewriteFilter вы используете, но если вы посмотрите на «Постоянно перенаправлять входящие URL-адреса, содержащие jsessionid». пример на следующем URL-адресе вы увидите, что JSESSIONID не является параметром, как другие параметры POST / GET.

http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/guide.html

Я настоятельно рекомендую использовать Firefox / Firebug вместе, чтобы изучить ваш POST-запрос и заголовки, чтобы вы получили представление о том, что именно передается. (Я уверен, что есть и другие подобные инструменты, которые тоже это делают, Fiddler 2 и т. Д.).