如何使用urlrewritefilter重定向http POST

时间:2013-09-04 10:46:12

标签: url-rewriting http-post http-get tuckey-urlrewrite-filter

我对urlrewritefilter有疑问,直到现在我在网上找不到任何关于它的内容。

我想在Tomcat7中重定向http POST。这是一个例子......

该呼叫是对ULR的HTTP POST,如

http://localhost:8080/oldApplication/Example?a=123&b=2

此调用还包含一些内容,如xml或json。过滤器配置正常,urlrewrite.xml包含:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">

<urlrewrite use-query-string="true">
    <rule>
        <condition type="method">POST</condition>
        <from>^(.*)$</from>
        <to type="redirect">/newApplication$1</to>
    </rule>
</urlrewrite>

在访问日志中,我可以看到对

的调用
http://localhost:8080/oldApplication/Example?a=123&b=2

被重定向到

http://localhost:8080/newApplication/Example?a=123&b=2

直到现在。问题是重写会改变方法,因此使用HTTP GET而不是HTTP POST调用新的url。我试图在方法上添加一个条件,但在重写后仍然得到了一个HTTP GET。

有人知道如何配置rewritefilter以避免这种情况吗?

1 个答案:

答案 0 :(得分:2)

您正在type="redirect"

上使用type属性重定向

此属性相当于使用HttpServletResponse.sendRedirect()方法实际向目标执行新请求的GET,因此所有参数都会随HTTP方法一起丢失。

如果未通知,则此属性的默认值为forward,等同于HttpServletRequest.getRequestDispatcher(url).forward()

转发将保留所有请求参数以及HTTP方法。

因此,为了获得所需的结果,您必须省略您的类型属性或将其设置为forward

<to>/newApplication$1</to>

<to type="forward">/newApplication$1</to>