REST 在 Maven 项目上的 AWS 中不起作用。就在本地

Posted

技术标签:

【中文标题】REST 在 Maven 项目上的 AWS 中不起作用。就在本地【英文标题】:REST not working in AWS on Maven Project. Just locally 【发布时间】:2016-06-03 03:58:43 【问题描述】:

所以我在 NetBeans 中创建了一个 Maven 项目。部署到 Amazon Elastic Beanstalk。我创建了连接到 Oracle DB 的 GET 服务(在本地完美运行)。

这是我用来从我的索引访问 GET 服务的代码,它在本地部署时工作:

以及带有URI的方法调用:

 self.ajax("http://127.0.0.1:8080/webresources/kpis/first/09/09/1994/second/20/02/2017", 'GET').done(function(data) 
  alert(data);
 );

(在本地运行时,在 8080 和 webresources 之间添加 /mavenproject1/)。

但是,在部署和运行代码时,我无法获得结果。 Chrome 在控制台“ERR_CONNECTION_REFUSED”中向我显示了这个错误(我想是因为它在部署时找不到本地主机)。我相信它是因为它找不到 localhost 并且它将 REST 视为跨域请求。

我需要在不将我的 REST 暴露给任何人的情况下将我的前端与后端连接起来。有人可以帮我吗?

谢谢。

【问题讨论】:

在您的上一个屏幕截图中,它尝试访问的 IP 地址是 0.0.0.0。这显然是不正确的。 “我需要在不将我的 REST 暴露给任何人的情况下将我的前端与后端连接起来。”您的前端在浏览器中运行,对吗?您究竟是如何在浏览器中配置 AJAX 调用以了解 REST 服务的地址? @Juan David Cruz Serrano 。我面临同样的问题。你解决了吗?我的服务在我的本地运行得非常好,但是当部署在 EC2 上时,它给了我 404 并说找不到服务。这真让我抓狂。任何帮助将不胜感激。 @HiteshBhutani 我确实解决了这个问题。而不是使用 PathParam 和带有以“/”分隔的参数的 URL。用户 QueryParam 并使用 self.ajax("/webresources/kpis/first?day=01&month=02&year=12")。等 【参考方案1】:

您的前端代码将不得不调用运行后端代码的主机的 IP 地址。没有办法解决这个问题。但如果前端后端由同一个进程提供服务,那么您可以在 ajax 调用中使用相对 url:

self.ajax("/webresources/kpis/first/09/09/1994/second/20/02/2017", 'GET')
    .done(function(data) 
         alert(data);
 );

公共调用者可以访问 GET 调用,但不能访问其他 HTTP 动词。您可以通过在服务器上设置 CORS 标头来指定细粒度控制。但是,如果您使用 ajax,您几乎会将您的 api 使用的所有动词暴露给任何和所有调用者。

如果您想更好地控制谁可以调用您的 api,则必须研究基于令牌的访问系统,例如 JWT,其中只有经过身份验证的客户端才能通过将令牌附加到随请求发送的标头来调用您的 api 端点。

【讨论】:

以上是关于REST 在 Maven 项目上的 AWS 中不起作用。就在本地的主要内容,如果未能解决你的问题,请参考以下文章

Angular:Http删除在我的rest api全栈项目中不起作用

Ctrl + 单击快捷方式在 Maven 项目中不起作用

AspectJ 在 IntelliJ 的 maven 项目中不起作用

Mysql Workbench 将表和列转换为在 Linux (AWS -EC2) 中不起作用的小写

AWS PHP SDK 2 (aws.phar) 在 xampp 中不起作用

Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用