java - URLRewrite 过滤器不适用于多部分表单

标签 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 方法 btw)时,问题就出现了。过滤器无法重写 url。

有什么办法可以解决这个问题吗?

最佳答案

如果您可以更改应用程序的源代码,您可以对其进行修改,以便您可以使用提取 JSESSIONID 的“参数”方法。默认情况下(至少在 Tomcat 上)JSESSIONID 不会在表单发布中传递,但您可以修改表单以包含它。例如,JSP 页面可能如下所示:

<form action="index.jsp" method="post">
    <input type="hidden" name="JSESSIONID" value="${pageContext.session.id}"/>
    <input type="submit"/>
</form>

或者,您可以尝试使用不同的条件从 session 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>

您还可以使用其他条件来检查 session ID 是否有效 (requested-session-id-valid),是否源自 cookie (requested-session-id-来自 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 请求和 header ,这样您就可以准确了解传递的内容。 (我敢肯定还有其他类似的工具也可以执行此操作,例如 Fiddler 2 等)。

关于java - URLRewrite 过滤器不适用于多部分表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7846063/

相关文章:

java - 如何从数组列表中获取所需的两个数字的组合?

java - 为什么spring boot使用不同包的线程来处理请求?

php - 在 Laravel 中从动态表单保存数据

html - 当没有在框中输入内容但光标仍在框中使用angular js时,如何使红色输入框出错?

url-rewriting - Sling 映射是否可以限制为带有主机 header 的请求

url-rewriting - 用nginx重写所有对index.php的请求

java - 使用 WebDriver DesiredCapativity 将功能 'applicationCacheEnabled' 设置为 'false'

html - 如何使所有 Contact 7 字段大小相同?

codeigniter - 如何在Windows Azure上重写Codeigniter的index.php

java - 调用 headlessfragment 时 Android Studio : Error of java. lang.NullPointerException