spring HTTP 和 HTTPS 的 HATEOAS 链接问题
spring HATEOAS links issue for HTTP and HTTPS
我正在我的网络应用程序中使用 Spring HATEOAS
。我的应用程序在 Nginx
网络服务器后面运行。我正在使用 HTTPS header
发送关注 url
获取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
但是当我看到响应 headers 时,我看到 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());
正如您在评论中提到的,您的应用程序在网络服务器后面运行。在这种情况下 Nginx.
您正在使用某种
linkTo(methodOn(MyController.class).myMethod(name)).withSelfRel());
生成 links。在这种情况下,请查看 ControllerLinkBuilder
。正如您在第 190 行看到的 Spring HATEOAS 基于当前请求构建了一个 link。
另外,requestheaderX-Forwarded-Proto
、X-Forwarded-Host
和X-Forwarded-Ssl
如果可用,则查询并使用。
这就是您为了使用 Spring HATEOAS 构建适当的 links 而错过的配置。
因为你抱怨你的 link 中只缺少 https
,Nginx 已经设置了 X-Forwarded-For
但跳过了 X-Forwarded-Proto
。我假设 Nginx 和您的应用程序通过 http
进行通信,否则您不会遇到麻烦。
你可以忽略X-Forwarded-Ssl
。仅当 Nginx 和您的应用程序讨论 https
时才相关。在那种情况下,您也不会看到任何问题。
下面是一个完整的 Nginx location
块供参考。 X-Forwarded-Proto
已设置为 https
以通知代理系统 links 必须在任何 URL 中包含 https
(仅当后端系统处理预先确定的请求时 header).
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;
}
如需进一步阅读,请参阅 http_proxy_module
.
的 Nginx 文档
我正在我的网络应用程序中使用 Spring HATEOAS
。我的应用程序在 Nginx
网络服务器后面运行。我正在使用 HTTPS header
获取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
但是当我看到响应 headers 时,我看到 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());
正如您在评论中提到的,您的应用程序在网络服务器后面运行。在这种情况下 Nginx.
您正在使用某种
linkTo(methodOn(MyController.class).myMethod(name)).withSelfRel());
生成 links。在这种情况下,请查看 ControllerLinkBuilder
。正如您在第 190 行看到的 Spring HATEOAS 基于当前请求构建了一个 link。
另外,requestheaderX-Forwarded-Proto
、X-Forwarded-Host
和X-Forwarded-Ssl
如果可用,则查询并使用。
这就是您为了使用 Spring HATEOAS 构建适当的 links 而错过的配置。
因为你抱怨你的 link 中只缺少 https
,Nginx 已经设置了 X-Forwarded-For
但跳过了 X-Forwarded-Proto
。我假设 Nginx 和您的应用程序通过 http
进行通信,否则您不会遇到麻烦。
你可以忽略X-Forwarded-Ssl
。仅当 Nginx 和您的应用程序讨论 https
时才相关。在那种情况下,您也不会看到任何问题。
下面是一个完整的 Nginx location
块供参考。 X-Forwarded-Proto
已设置为 https
以通知代理系统 links 必须在任何 URL 中包含 https
(仅当后端系统处理预先确定的请求时 header).
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;
}
如需进一步阅读,请参阅 http_proxy_module
.