function demo(request,response){
request.getScheme() is returning http instead of returning https.
System.out.println(""+request.getScheme());
}
输出:HTTP
- 上面的函数演示是从main方法调用的,但它打印http而不是它应该在Internet服务器上打印时打印https。
答案 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+"/";