java - Spring Boot 验证码配置

标签 java spring spring-boot okhttp

我正在 Spring Boot 上开发一个应用程序,但是出于安全目的,我需要在各种表单上集成 recaptcha,但是连接总是导致连接超时,我使用 postman 验证了 api 和 url,它通过了并且返回一个答案,但是在 Java 代码时间耗尽时,我收到错误 java.net.ConnectException: Connection timed out: connect 我不知道我做错了什么我使用 postman 代码提供“Java OK HTTP”。代码是下一个。

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX")
.get()
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "f47548e1-a9e0-9065-7f76-dced294bddcb")
.build();

Response response = client.newCall(request).execute();

但是我似乎不知道错误出在哪里,有人可以帮助我吗?

最佳答案

您遇到连接超时错误,因此我们可以说:

  • 由于这不是未知主机错误,因此您必须有一个可以为 www.google.com 提供 IPv4 或 IPv6 地址的 DNS
  • 由于这不是目标无法到达错误,因此您有一条到网关的路由,并且该网关是具有默认路由的本地路由器。

因此,connect 超时意味着您已向目的地发送了一个 TCP SYN 数据包,并且该数据包已在您的本地网络中的某个位置或在您的网络与 Internet 之间的接口(interface)处被丢弃, 在防火墙中(因为您没有收到任何表示出现问题的 ICMP/ICMPv6 数据包 - 标准路由器应该向您发送此类信息)。

问题出在第一个数据包 (TCP SYN) 上,因此您的问题与源代码中的 addHeader() 调用无关。在您的情况下,这些 header 永远不会发送并出现此错误。

由于 www.google.fr 有 IPv4 和 IPv6 地址,因此有两种可能性:

  • 您有一个发送 RA 通告的本地 IPv6 路由器,但未通过 IPv6 连接到 Internet。 试试这个来检查这个案例:

替换:

https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX

作者:

https://[2a00:1450:400c:c04::6a]/recaptcha/api/siteverify?secret=XX&response=XXX

如果您继续出现超时,则表示您的 IPv6 路由器配置不正确。

  • 或者您有防火墙并需要使用代理

替换:

https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX

作者:

https://74.125.206.104/recaptcha/api/siteverify?secret=XX&response=XXX

如果您继续超时,则意味着您有防火墙并且应该使用代理。

关于java - Spring Boot 验证码配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040726/

相关文章:

spring - org.springframework.batch.item.ItemStreamException : File is not writable: Spring Batch

java - 如何使用 BouncyCaSTLe 的 TLS Api 导入 keystore

java - 在 Android Q 中无法从 "android.location.ILocationManager"找到方法 reportLocation()

java - 拖动鼠标画线

java - Spring ApplicationContext getBean 仅在 AutoWired 之前有效

java - 按 JPA 标准查询中的聚合字段过滤

java - Spring Batch - 获取 CSV 中总记录数的最简单方法?

java - Spring - 配置属性用法

java - Redis 问题考虑在您的配置中定义类型为 'org.springframework.data.redis.core.HashOperations' 的 bean

java - 在 JUnit 中使用(out)存储库对 Spring Boot 服务类进行单元测试