MockHttpServletRequest忽略设置字段,我该如何解决这个问题呢?

时间:2015-03-12 00:43:33

标签: java servlets spring-test

我正在尝试为Tomcat应用程序测试servlet过滤器。为此,我使用的是Spring提供的MockHttpServletRequest。

我这样设置:

MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.setRemoteHost("mycompany.com");
request.setRequestURI("/myapp.php");
request.setSecure(true);

但是当我接下来的时候:

System.out.println(request.getRequestURL());

产生:http://localhost/myapp.php。另一方面,如果我明确请求我设置的一个字段,例如:

System.out.println(request.getRemoteHost());

我得到:mycompany.com

这里发生了什么?如何让getRequestURL生成我真正追求的内容:https://mycompany.com/myapp.php

2 个答案:

答案 0 :(得分:1)

您正在创建一个MockHttpServletRequest,它表示在服务器上运行的servlet接收的请求。

MockHttpServletRequest#getRemoteHost()的javadoc(真的是ServletRequest)陈述

  

返回客户端的完全限定名称或最后一个代理   发送了请求。

因此,您使用setRemoteHost设置的是发出请求的客户端的主机名/ ip,而不是接收请求的服务器的主机名。

您需要MockHttpServletRequest#setServerName(String)

request.setServerName("mycompany.com");

答案 1 :(得分:1)

Sotirios对于serverNameremoteHost的说法是正确的。但是,这种改变只能让你部分到那里。

以下将实现您的目标:

MockHttpServletRequest request = new MockHttpServletRequest();
request.setScheme("https");
request.setServerName("mycompany.com");
request.setServerPort(443);
request.setRequestURI("/myapp.php");

System.out.println(request.getRequestURL());
// Prints: https://mycompany.com/myapp.php

此致

萨姆