一个系统上的 RestTemplate/FeignClient SSL 异常

发布时间:2021-03-08 15:55

代码在一个系统上工作,但在另一个系统上不起作用。

@FeignClient(name="TodoApi", url = "https://jsonplaceholder.typicode.com")
public interface TodoApi {

    @GetMapping("/todos/{id}")
    ToDo findById(@PathVariable("id") Integer id);
}

工作系统 1

java version "14.0.2" 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

工作系统 2

java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

它不起作用的地方

java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

pom 配置

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
...
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>
    ...
    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

抛出以下异常

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210) ~[na:1.8.0_271]
    at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_271]
    at sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:475) ~[na:1.8.0_271]
    at sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:469) ~[na:1.8.0_271]
 

我有以下问题

  1. 为什么会这样?是因为java版本吗?或者它可能是一些防火墙?
  2. 有些人建议我应该使用 SSL 证书,我不想管理它,因为 URL 或域会不断变化(动态),是否有自动方法?如果必须使用 SSL 证书,我们能否以编程方式下载并从 URL 使用它?
回答1