MockHttpServletRequest 忽略设置字段,我该如何解决这个问题?
MockHttpServletRequest ignoring set fields, how do I get around this?
我正在尝试为 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
您正在创建一个 MockHttpServletRequest
,它表示服务器上 运行 的 servlet 收到的请求。
MockHttpServletRequest#getRemoteHost()
(really of ServletRequest
) 的 javadoc 声明
Returns the fully qualified name of the client or the last proxy that
sent the request.
因此,您使用 setRemoteHost
设置的是发出请求的客户端的 hostname/ip,而不是接收请求的服务器的主机名。
你会想要MockHttpServletRequest#setServerName(String)
request.setServerName("mycompany.com");
Sotirios 关于 serverName
与 remoteHost
的说法是正确的;然而,这种改变只会让你部分到达那里。
以下将实现您的目标:
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
此致,
山姆
我正在尝试为 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
您正在创建一个 MockHttpServletRequest
,它表示服务器上 运行 的 servlet 收到的请求。
MockHttpServletRequest#getRemoteHost()
(really of ServletRequest
) 的 javadoc 声明
Returns the fully qualified name of the client or the last proxy that sent the request.
因此,您使用 setRemoteHost
设置的是发出请求的客户端的 hostname/ip,而不是接收请求的服务器的主机名。
你会想要MockHttpServletRequest#setServerName(String)
request.setServerName("mycompany.com");
Sotirios 关于 serverName
与 remoteHost
的说法是正确的;然而,这种改变只会让你部分到达那里。
以下将实现您的目标:
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
此致,
山姆