nginx-HTTP和HTTPS的春季HATEOAS链接问题

前端之家收集整理的这篇文章主要介绍了nginx-HTTP和HTTPS的春季HATEOAS链接问题 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在Web应用程序中使用Spring HATEOAS.我的应用程序在Nginx Web服务器后面运行.我正在使用HTTPS标头发送以下网址

GET https://national.usa.com/testapp-rest/api/user/654rtrtet-5grt-fgsdf-dfgs-765ytrtsdhshfgsh/newAuthentication

Status Code:200 OK
Response Headersview sourceAccess-Control-Allow-Headers:x-requested-with,Accept,Content-Type,Origin,Authorization,X-Auth-Token
Access-Control-Allow-Methods:POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:X-Auth-Token
Access-Control-Max-Age:3600
Cache-Control:no-cache,no-store,must-revalidate
Connection:keep-aliveContent-Type:application/json
Pragma:No-cacheServer:XXX/1.6.0
Strict-Transport-Security:max-age=31536000
Transfer-Encoding:chunkedRequest Headers
view sourceAccept:application/json,text/plain,*/*Accept-Encoding:gzip,deflate,sdch

但是,当我看到响应头时,我看到HATEOAS链接仅返回HTTP.如何解决这个问题?请指导.

"links: [{rel: "self",…}]0: {rel: "self",…}href: "http://national.usa.com
/testapp-rest/api/user/5435fdsg-45gfdgag-rewtdf43434-43543fsd "rel

编辑:是的,我使用以下代码创建链接

resource.add(ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(TestController.class).getStudentResponse(response.getStudentId())).withSelfRel());
最佳答案
正如您在评论中提到的那样,您的应用程序在Web服务器后面运行.在这种情况下,Nginx.

您正在使用某种

linkTo(methodOn(MyController.class).myMethod(name)).withSelfRel());

生成链接.在这种情况下,请看一下ControllerLinkBuilder.如您在190行中所见,Spring HATEOAS根据当前请求构建一个链接.
另外,查询请求标头X-Forwarded-Proto,X-Forwarded-Host和X-Forwarded-Ssl(如果有).

这就是您为了使用Spring HATEOAS构建正确的链接而错过的配置.

因为您抱怨链接中仅缺少https,所以Nginx已经设置了X-Forwarded-For,但是跳过了X-Forwarded-Proto.我假设Nginx和您的应用程序通过http进行通信,否则您不会遇到麻烦.
您可以忽略X-Forwarded-Ssl.仅当Nginx和您的应用程序通过https对话时才有意义.在这种情况下,您也不会看到任何问题.

在下面,您可以找到完整的Nginx位置块以供参考. X-Forwarded-Proto已设置为https,以通知代理系统链接必须在任何URL中包含https(仅当后端系统处理带有伪造的请求标头时).

location /yourapp {
    proxy_pass http://localhost:8080/yourapp;
    proxy_redirect default;
    proxy_set_header  Host               $http_host;
    proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto  https;
}

有关更多信息,请查阅Nginx文档http_proxy_module.

猜你在找的Nginx相关文章