request.getScheme()返回http而不是在java中返回https

时间:2014-09-18 11:28:04

标签: java java-ee

function demo(request,response){
        request.getScheme() is returning http instead of returning https.
        System.out.println(""+request.getScheme());
}

输出:HTTP

- 上面的函数演示是从main方法调用的,但它打印http而不是它应该在Internet服务器上打印时打印https。

3 个答案:

答案 0 :(得分:6)

请参阅答案https://stackoverflow.com/a/19599143/1524502,并注意有关支持反向代理或负载均衡器的问题。最有可能的是,这是你的问题。

该问题的回答者建议使用

request.getHeader("x-forwarded-proto")

相反,尽管这取决于您的负载均衡器正确设置标题。

答案 1 :(得分:4)

如果您的服务器在代理服务器后面运行,请确保已设置代理标头:

proxy_set_header X-Forwarded-Proto  $scheme;

然后要获得正确的scheme,可以使用springframework的类:

HttpRequest httpRequest = new ServletServerHttpRequest(request); //request is HttpServletRequest
UriComponents uriComponents = UriComponentsBuilder.fromHttpRequest(httpRequest).build();

String scheme = uriComponents.getScheme(); // http/https

答案 2 :(得分:1)

我以前在getScheme()中遇到过类似的问题

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

我已经解决了使用“ //”的问题:

String basePath = "//"+request.getServerName()+":"+request.getServerPort()+path+"/";
相关问题