无法从浏览器访问远程Spring Boot应用程序

时间:2018-12-14 06:02:22

标签: java spring spring-boot tomcat

已检查参考问题:

  1. Tomcat server not working “externally”
  2. Spring Boot Service works locally but not remotely
  3. How to configure embedded Tomcat integrated with Spring to listen requests to IP address, besides localhost?

我们在192.168.22.125 Linux环境的嵌入式tomcat服务器中将Spring Boot应用程序部署为独立的Java可执行文件。在同一环境中,我们还具有在不同端口(9045)上运行的Weblogic 12C应用程序,我们可以通过浏览器对其进行访问。假设我们在Spring Boot应用程序中的休息端点为192.168.22.125:8888/jobs/uploads,我们可以通过如下所示的Java应用程序(也部署在Weblogic中)访问此端点。

    URL url = new URL(serverURL);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    ...
    ...

但是我们无法从浏览器或在Windows wget中使用powershell来访问它们。参考问题1,我们发现浏览器存在问题。参考问题2,解决方案可能是将端口添加到路由器配置中(如果没有其他作用,这将是最后的选择)。当我在连接到8888端口的腻子上尝试netstat时,输出为

tcp46      0      0  :::.8888                 :::.*   LISTEN

但是对于运行Weblogic应用程序的端口9045,输出为

tcp46      0      0  192.168.22.125:9045      *.*     LISTEN

因此,在参考了问题3之后,我尝试了server.address=192.168.22.125,希望Tomcat将其绑定并开始侦听请求。即使netstat的输出已更改,结果还是一样的(也许我在这里缺少一些逻辑上的理解?)。

我的问题是

  1. 我还需要尝试其他哪些解决方案?
  2. 为什么可以访问Weblogic中部署的应用程序,但不能从浏览器访问Spring Boot应用程序?需要完成哪些其他设置/配置?
  3. 为什么来自Java应用程序(部署在Weblogic中)的请求成功了,但是却没有来自浏览器的请求成功?是因为Java应用程序在与Spring Boot应用程序相同的环境中运行,还是因为出现此类请求而忽略了某些检查?

任何进一步了解这些网络事物的资源都将非常有帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

答案: 通过推断,您似乎能够在端口80上访问Weblogic应用程序,因为您的路由器已转发了端口80。如果在同一Linux实例(即localhost)上运行的Java应用程序可以访问REST api,那么您似乎很清楚需要在防火墙设置中转发REST api的端口-在您的示例中为端口8888。

如果Windows计算机与REST服务之间存在防火墙,则在不转发端口的情况下将无法直接访问它。

此外,请确保您在网址中包含非标准端口,如下所示:

http://192.168.22.125:8888/jobs/uploads

假设: 如果我理解您的问题,则您有一个Linux实例,该实例托管Weblogic Web应用程序和Spring Boot REST api。您可以通过Windows计算机的远程连接直接在浏览器中访问Weblogic应用程序,但不能通过REST api访问。同一Linux实例上的Java应用程序可以访问REST api。如果我理解正确,Windows机器和Linux实例之间还会有防火墙。