我正在使用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。
有任何想法如何解决这个问题?
答案 0 :(得分:1)
如果您可以更改应用程序的源代码,则可以对其进行修改,以便您可以使用“参数”方法来提取JSESSIONID。默认情况下(至少在Tomcat上),JSESSIONID不会在表单发布中传递,但您可以修改表单以包含它。例如,JSP页面可能如下所示:
<form action="index.jsp" method="post">
<input type="hidden" name="JSESSIONID" value="${pageContext.session.id}"/>
<input type="submit"/>
</form>
或者,您可以尝试使用不同的条件从会话cookie中获取JSESSIONID。我没有尝试过以下内容,但想象一下它可能适合你:
<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>
您可以使用其他条件来检查会话ID是否有效( requested-session-id-valid ),源自Cookie( requested-session-id- from-cookie )或源自帖子操作的网址( requested-session-id-from-url )。
我不确定您使用的是哪个版本的UrlRewriteFilter,但如果您查看以下网址中的“永久重定向包含jsessionid。的传入网址”示例,您会看到JSESSIONID不是像其他POST / GET参数一样的参数是。
http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/guide.html
我强烈建议您一起使用Firefox / Firebug来检查您的POST请求和标题,以便准确了解传递的内容。 (我确信还有其他类似的工具可以做到这一点,Fiddler 2等。)。