Фильтр URLRewrite не работает с многочастной формой - PullRequest
5 голосов
/ 21 октября 2011

Я использую фильтр 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 btw).Фильтр не может переписать URL.

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

1 Ответ

1 голос
/ 31 октября 2011

Если вы можете изменить источник приложения, вы можете изменить его так, чтобы вы могли использовать «параметр» метод извлечения 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>

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

...