URLRewrite过滤器不使用多部分表单

时间:2011-10-21 07:05:49

标签: java forms url-rewriting multipart tuckey-urlrewrite-filter

我正在使用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。

有任何想法如何解决这个问题?

1 个答案:

答案 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等。)。