我对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以避免这种情况吗?
答案 0 :(得分:2)
您正在type="redirect"
此属性相当于使用HttpServletResponse.sendRedirect()
方法实际向目标执行新请求的GET
,因此所有参数都会随HTTP方法一起丢失。
如果未通知,则此属性的默认值为forward
,等同于HttpServletRequest.getRequestDispatcher(url).forward()
转发将保留所有请求参数以及HTTP方法。
因此,为了获得所需的结果,您必须省略您的类型属性或将其设置为forward
。
<to>/newApplication$1</to>
或
<to type="forward">/newApplication$1</to>