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

标签 java spring-mvc spring-boot spring-boot-test mockmvc

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

//given     
MockHttpServletRequestBuilder requestBuilder = get("/users/register/user1");

我要检查的是这个请求的远程。在我的 Controller 中,我从 HttpServletRequest

获取此信息
HttpServletRequest request;
request.getRemoteHost();
request.getRemoteAddr();

不幸的是,现在 getRemoteHost() 将始终返回 localhost

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

remoteHost: localhost --> mockhostdomain

remoteAddr: 127.0.0.1 --> 10.32.120.7 (anything different)

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

最佳答案

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

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

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

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

private static RequestPostProcessor remoteHost(final String remoteHost) {
    return request -> {
        request.setRemoteHost(remoteHost);
        return request;
    };
}

然后在 MockHttpServletRequestBuilder 对象上使用方法 with(...) 我们必须注入(inject)这个方法的结果。

 MockHttpServletRequestBuilder requestBuilder = get("/user/prop").
         .with(remoteHost("mockhostdomain.com"));

关于java - MockHttpServletRequestBuilder - 如何更改 HttpServletRequest 的 remoteHost 的 remoteAddress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53655413/

相关文章:

java - 在优先级阻塞队列中设置顺序

java - 如何计算上传文件 PDF、Doc、Xls、Csv 等中的单词字符或句子

java - 使用 Java Streams 将对象列表转换为带过滤器的字符串列表

java - hibernate 没有在 spring mvc 中更新

java - 使用 Multi-Tenancy 时的 Spring Boot 范围问题

spring-boot - Spring Boot/Gradle/Querydsl项目有相同的依赖依赖不同版本的另一个依赖

java - 将带有 json 的字符串转换为列表

java - Spring MVC RequestMapping 不适用于 RestController

java - 使用 RestTemplate 和 Jackson 反序列化对 Java 的 JSON 响应

spring-boot - Spring 云安全与 Spring 安全