2015-03-12 1 views
0

Я пытаюсь проверить фильтр сервлета для приложения Tomcat. Для этого я использую MockHttpServletRequest, предоставленный 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

ответ

1

Sotirios было правильным в отношении serverName VS. 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 

С уважением,

Сэм

1

Вы создаете MockHttpServletRequest, который представляет запрос, который получает сервлет, работающий на сервере.

Javadoc из MockHttpServletRequest#getRemoteHost() (на самом деле из ServletRequest) состояний

Возвращает полное имя клиента или последнего прокси-сервера, который послал запрос.

Так что вы устанавливаете setRemoteHost - это имя хоста/ip клиента, делающего запрос, а не имя хоста сервера, получающего запрос.

Вы хотите MockHttpServletRequest#setServerName(String)

request.setServerName("mycompany.com");