我正在研究微服务架构。我有3个不同的应用程序与不同的域名。假设应用程序1有一个API:
"/app/foo-bar"
此API从应用程序2的某些服务调用,该服务也由某些API触发。也可以从应用程序3调用此API。
我现在需要的是,当在应用程序1中调用API时,我想找出它被调用的应用程序。 (申请2或申请3的域名)
我试过这个:
request.getHeader("referer");
但这会让我失望
有什么方法可以解决这个问题吗?
您必须在调用API期间设置标头。此外,您必须在该API中获取调用者来源的标头。
API调用期间的SET标头:app/foo-bar
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("referer", "APP_1");
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
获取API中的标头
@RequestMapping(value = "/app/foo-bar")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
List<String> parameters = headers.get("parameters");
String referer = null;
for (String header : parameters) {
if (header.equals("referer")) {
referer = header;
}
}
System.out.println(referer);
return referer;
}
这是进口:
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
您需要在原始应用程序(示例中的应用程序2或应用程序3)中添加referer标头,以便在HttpRequest中添加它。
另一种获取源主机的方法在这里提到:Get URL of the request sender with HttpServletRequest