spring-boot - 无法通过 vpn 通过机器名称访问 Rest Endpoint
问题描述
我面临Rest Endpoint的问题。当我尝试使用机器名而不是 localhost 访问 url 时,出现Access Denied 错误。它只会通过VPN 连接给出这个错误,否则它在没有 VPN 的情况下工作正常。
我对浏览器没有同样的问题。浏览器能够识别带有机器名称的 url。仅当我尝试通过 Java 代码或 Postman 使用在同一台机器上的不同微服务上运行的任何端点时才会出现此问题
例如,如果我正在使用 Java 中的某个端点。
restTemplate.getForEntity("http://localhost:8761/actuator/beans", Object.class).getBody()
//Working fine
restTemplate.getForEntity("http://my_machine_name:8761/actuator/beans", Object.class).getBody()
//Access denied
或通过邮递员
http://my_machine_name:8761/actuator/beans
错误:连接 EACCES 192.xxx.xx:8761
主要是我使用Discovery Client 来识别机器名称和端口,这样我就不需要在 url中硬编码localhost 。我正在使用FeignClient 作为负载均衡器,但看起来restTemplate也给出了同样的错误。
解决方案
我已经修复了上述错误。如果你用 VPN 连接你的机器,它会改变你的网络。因此,您需要找到您的机器正在使用的 IP 地址。在命令提示符下尝试 ipconfig 以在 Windows 中查找 IP 地址。
如果您提供您的机器名称而不是上面的 IP 地址,那么它将无法找到您的机器,因为您的机器名称在您的网络中不可用(因为 VPN 连接)。
machine.ip.address=XX.66.223.XXX
eureka.client.service-url.default-zone=http://${machine.ip.address}:8761/eureka
eureka.instance.hostname=${machine.ip.address}
在您的 URL 中提供您的网络 IP 地址而不是机器名称以使其正常工作。
推荐阅读
- python - 如何在 python plotly dash 中使用 Font Awesome 图标
- php - 如何让这个 php 代码连接到 sql 工作台?
- maven - mvn 版本:use-releases 仅在 .m2 中找到版本,但在存储库中找不到
- spring-boot - 用于传输 FHIR 资源的 RSocket 与 HTTP 性能
- reactjs - react js输入不允许写入
- objective-c - 如何在 Swift 中将自定义 Objc 结构转换为 NSValue?
- python - 每当我运行我的 Django 程序时,我都会继续收到错误消息
- azure-active-directory - 来宾用户的角色在 Azure Active Directory 身份验证令牌声明中不可见
- reactjs - 如何使用道具将数据从父母传递给孩子
- android - com.android.dex.DexIndexOverflowException:方法 ID 不在 [0, 0xffff] 中:65536