MockHttpServletRequestBuilder - 如何更改 HttpServletRequest 的 remoteHost 的 remoteAddress?

Prz*_*iec 4 java spring-mvc spring-boot mockmvc spring-boot-test

我正在尝试为集成测试(@SpringBootTest)创建模拟请求。

//given     
MockHttpServletRequestBuilder requestBuilder = get("/users/register/user1");
Run Code Online (Sandbox Code Playgroud)

我想检查的是这个请求的遥控器。在我的控制器中,我从HttpServletRequest获取此信息

HttpServletRequest request;
request.getRemoteHost();
request.getRemoteAddr();
Run Code Online (Sandbox Code Playgroud)

不幸的是,现在getRemoteHost()总是会返回localhost

我想在我的模拟请求中将其更改为其他内容,例如:

远程主机:localhost-->mockhostdomain

远程地址:127.0.0.1--> 10.32.120.7(任何不同)

我找不到合适的方法。甚至有可能吗?

Prz*_*iec 9

我终于在这里找到了解决方案:

https://techotom.wordpress.com/2014/11/12/mocking-remoteaddr-with-spring-mvc/

基本上使用这种方法我们可以更改请求的每个参数。

所以首先我们必须定义我们的方法来改变我们想要的请求:

private static RequestPostProcessor remoteHost(final String remoteHost){
    return request -> {
        request.setRemoteAddr(remoteHost);
        return request;
    };
Run Code Online (Sandbox Code Playgroud)

而不是与方法with(...)上的MockHttpServletRequestBuilder对象,我们必须注射这种方法的结果。

 MockHttpServletRequestBuilder requestBuilder = get("/user/prop").
         .with(remoteHost("mockhostdomain.com"));
Run Code Online (Sandbox Code Playgroud)