#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 и т. Д.).