无法从HttpServletRequest中提取标头

问题描述 投票:1回答:2

我正在研究微服务架构。我有3个不同的应用程序与不同的域名。假设应用程序1有一个API:

 "/app/foo-bar"

此API从应用程序2的某些服务调用,该服务也由某些API触发。也可以从应用程序3调用此API。

我现在需要的是,当在应用程序1中调用API时,我想找出它被调用的应用程序。 (申请2或申请3的域名)

我试过这个:

request.getHeader("referer");

但这会让我失望

有什么方法可以解决这个问题吗?

java servlets
2个回答
2
投票

您必须在调用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
投票

您需要在原始应用程序(示例中的应用程序2或应用程序3)中添加referer标头,以便在HttpRequest中添加它。

另一种获取源主机的方法在这里提到:Get URL of the request sender with HttpServletRequest

© www.soinside.com 2019 - 2024. All rights reserved.