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

Я использую фильтр tuckey URLRewrite, имеющий одно из следующих правил:

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

    </note>
    <condition type="parameter" name="ParamName">[\p{ASCII}]+</condition>
    <from>^/([^?]*)\.htm(.*)$</from>
    <to type="proxy">%{request-url};jsessionid=%{parameter:ParamName}$2</to>
</rule>

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

Любые идеи, как решить эту проблему?


person Wojtek Owczarczyk    schedule 21.10.2011    source источник
comment
Какую ошибку вы получаете?   -  person Kraylog    schedule 27.10.2011
comment
из регулярного выражения не соответствует, и правило перезаписи не работает   -  person Wojtek Owczarczyk    schedule 30.10.2011
comment
Ваша проблема в том, что вы не можете получить значения поля ввода через POST?   -  person kamaci    schedule 30.10.2011
comment
Помните, что кодировка Enctype имеет application или multipart/form-data ...... В общем, я считаю, что enctype должен сопровождаться тегом INPUT, включает ли ваша страница формы? Если это так, вы должны вставить оставшуюся часть. Но пока я бы попытался придерживаться application/x-www-form-urlencoded , если у вас нет ввода.   -  person jayunit100    schedule 30.10.2011


Ответы (1)


Если вы можете изменить источник приложения, вы можете изменить его, чтобы использовать метод «параметров» для извлечения 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(.*)$</from>
    <to type="proxy">%{request-url};jsessionid=%{cookie:JSESSIONID}$2</to>
</rule>

Существуют и другие условия, которые вы потенциально можете использовать для проверки того, был ли идентификатор сеанса действительным (requested-session-id-valid), полученным из файла cookie (requested-session-id-from-cookie ) или исходит из URL-адреса действия публикации (requested-session-id-from-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 и т. д.).

person Mark McLaren    schedule 30.10.2011