From b0cfd8142320d7635f4a0aeab0e93fb6c50f2000 Mon Sep 17 00:00:00 2001
From: Jacky <17600037713@163.com>
Date: Tue, 12 Nov 2024 16:09:05 +0800
Subject: [PATCH] chore(): migrate sdk version - migrate apache httpclient to
httpclient5
https://hc.apache.org/httpcomponents-client-5.4.x/migration-guide/migration-to-classic.html
- upgrade jdk version to 17 - upgrade springboot 3.2.5
---
payment-spring-boot-autoconfigure/pom.xml | 17 ++++----
.../payment/wechat/v2/model/BaseModel.java | 43 ++++++++++++++-----
.../payment/wechat/v3/SignatureProvider.java | 11 +++--
.../payment/wechat/v3/WechatPayClient.java | 7 +--
payment-spring-boot-starter/pom.xml | 15 ++++---
pom.xml | 13 +++---
6 files changed, 66 insertions(+), 40 deletions(-)
diff --git a/payment-spring-boot-autoconfigure/pom.xml b/payment-spring-boot-autoconfigure/pom.xml
index 86214da8..1bed04d2 100644
--- a/payment-spring-boot-autoconfigure/pom.xml
+++ b/payment-spring-boot-autoconfigure/pom.xml
@@ -22,20 +22,20 @@
cn.felord
payment-spring-boot
- 1.0.20.RELEASE
+ ${revision}
payment-spring-boot-autoconfigure
- 1.0.20.RELEASE
+ ${revision}
jar
4.0.0
- 1.8
- 1.8
+ 17
+ 17
UTF-8
UTF-8
- 1.8
+ 17
@@ -74,9 +74,10 @@
alipay-sdk-java
- org.apache.httpcomponents
- httpclient
- provided
+ org.apache.httpcomponents.client5
+ httpclient5
+ 5.2.3
+
com.fasterxml.jackson.dataformat
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/model/BaseModel.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/model/BaseModel.java
index f5ceb41e..579dd972 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/model/BaseModel.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/model/BaseModel.java
@@ -28,11 +28,20 @@
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import lombok.Getter;
import lombok.SneakyThrows;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.hc.client5.http.config.ConnectionConfig;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
+import org.apache.hc.core5.http.io.SocketConfig;
+import org.apache.hc.core5.http.ssl.TLS;
+import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
+import org.apache.hc.core5.pool.PoolReusePolicy;
+import org.apache.hc.core5.ssl.SSLContextBuilder;
+import org.apache.hc.core5.ssl.SSLContexts;
+import org.apache.hc.core5.util.TimeValue;
+import org.apache.hc.core5.util.Timeout;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.util.encoders.Hex;
@@ -65,6 +74,7 @@
import java.util.TreeMap;
import java.util.stream.Collectors;
+
/**
* The type Base model.
*
@@ -231,13 +241,26 @@ private RestTemplate getRestTemplateClientAuthentication(String mchId)
SSLContext sslcontext = SSLContextBuilder.create()
.loadKeyMaterial(store, pem)
.build();
- // Allow TLSv1 protocol only
- HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"},
- null, hostnameVerifier);
+
+ PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
+ .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create()
+ .setSslContext(SSLContexts.createSystemDefault())
+ .setTlsVersions(TLS.V_1_3)
+ .build())
+ .setDefaultSocketConfig(SocketConfig.custom()
+ .setSoTimeout(Timeout.ofMinutes(1))
+ .build())
+ .setPoolConcurrencyPolicy(PoolConcurrencyPolicy.STRICT)
+ .setConnPoolPolicy(PoolReusePolicy.LIFO)
+ .setDefaultConnectionConfig(ConnectionConfig.custom()
+ .setSocketTimeout(Timeout.ofMinutes(1))
+ .setConnectTimeout(Timeout.ofMinutes(1))
+ .setTimeToLive(TimeValue.ofMinutes(10))
+ .build())
+ .build();
CloseableHttpClient httpclient = HttpClients.custom()
- .setSSLSocketFactory(sslsf)
+ .setConnectionManager(connectionManager)
.build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpclient);
return new RestTemplate(clientHttpRequestFactory);
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java
index b949cd66..0f554b91 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java
@@ -32,7 +32,6 @@
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.util.AlternativeJdkIdGenerator;
import org.springframework.util.Assert;
-import org.springframework.util.Base64Utils;
import org.springframework.util.IdGenerator;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate;
@@ -161,7 +160,7 @@ public String doRequestSign(PrivateKey privateKey, String... orderedComponents)
signer.initSign(privateKey);
final String signatureStr = createSign(orderedComponents);
signer.update(signatureStr.getBytes(StandardCharsets.UTF_8));
- return Base64Utils.encodeToString(signer.sign());
+ return Base64.getEncoder().encodeToString(signer.sign());
}
/**
@@ -189,7 +188,7 @@ public boolean responseSignVerify(ResponseSignVerifyParams params) {
Signature signer = Signature.getInstance("SHA256withRSA", BC_PROVIDER);
signer.initVerify(certificate.getX509Certificate());
signer.update(signatureStr.getBytes(StandardCharsets.UTF_8));
- return signer.verify(Base64Utils.decodeFromString(params.getWechatpaySignature()));
+ return signer.verify(Base64.getDecoder().decode((params.getWechatpaySignature())));
} catch (Exception e) {
throw new PayException("An exception occurred during the response verification, the cause: " + e.getMessage());
}
@@ -288,7 +287,7 @@ public String decryptResponseBody(String tenantId, String associatedData, String
byte[] bytes;
try {
- bytes = cipher.doFinal(Base64Utils.decodeFromString(ciphertext));
+ bytes = cipher.doFinal(Base64.getDecoder().decode((ciphertext)));
} catch (GeneralSecurityException e) {
throw new PayException(e);
}
@@ -314,7 +313,7 @@ public String encryptRequestMessage(String message, Certificate certificate) {
byte[] data = message.getBytes(StandardCharsets.UTF_8);
byte[] cipherData = cipher.doFinal(data);
- return Base64Utils.encodeToString(cipherData);
+ return Base64.getEncoder().encodeToString(cipherData);
} catch (Exception e) {
throw new PayException(e);
@@ -335,7 +334,7 @@ public String decryptResponseMessage(String message, String tenantId) {
PrivateKey privateKey = wechatMetaBean.getKeyPair().getPrivate();
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding", BC_PROVIDER);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
- byte[] data = Base64Utils.decodeFromString(message);
+ byte[] data = Base64.getDecoder().decode((message));
byte[] cipherData = cipher.doFinal(data);
return new String(cipherData, StandardCharsets.UTF_8);
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java
index 6c987baf..635b2598 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayClient.java
@@ -252,7 +252,8 @@ private void doExecute(WechatRequestEntity requestEntity) {
ResponseEntity responseEntity = restOperations.exchange(requestEntity, ObjectNode.class);
HttpHeaders headers = responseEntity.getHeaders();
ObjectNode body = responseEntity.getBody();
- HttpStatus statusCode = responseEntity.getStatusCode();
+ HttpStatusCode statusCode = responseEntity.getStatusCode();
+
// 微信请求id
String requestId = headers.getFirst("Request-ID");
if (!statusCode.is2xxSuccessful()) {
@@ -298,7 +299,7 @@ private String doDownload(WechatRequestEntity requestEntity) {
ResponseEntity responseEntity = restOperations.exchange(requestEntity, String.class);
- HttpStatus statusCode = responseEntity.getStatusCode();
+ HttpStatusCode statusCode = responseEntity.getStatusCode();
// 微信请求id
String requestId = requestEntity.getHeaders().getFirst("Request-ID");
if (!statusCode.is2xxSuccessful()) {
@@ -322,7 +323,7 @@ private ResponseEntity doResource(WechatRequestEntity requestEn
ResponseEntity responseEntity = restOperations.exchange(requestEntity, Resource.class);
- HttpStatus statusCode = responseEntity.getStatusCode();
+ HttpStatusCode statusCode = responseEntity.getStatusCode();
// 微信请求id
String requestId = requestEntity.getHeaders().getFirst("Request-ID");
if (!statusCode.is2xxSuccessful()) {
diff --git a/payment-spring-boot-starter/pom.xml b/payment-spring-boot-starter/pom.xml
index 52620ab0..ef9dc997 100644
--- a/payment-spring-boot-starter/pom.xml
+++ b/payment-spring-boot-starter/pom.xml
@@ -22,21 +22,21 @@
cn.felord
payment-spring-boot
- 1.0.20.RELEASE
+ ${revision}
payment-spring-boot-starter
- 1.0.20.RELEASE
+ ${revision}
jar
4.0.0
- 1.8
- 1.8
+ 17
+ 17
UTF-8
UTF-8
- 1.8
+ 17
@@ -53,8 +53,9 @@
bcprov-jdk15to18
- org.apache.httpcomponents
- httpclient
+ org.apache.httpcomponents.client5
+ httpclient5
+ 5.2.3
com.fasterxml.jackson.dataformat
diff --git a/pom.xml b/pom.xml
index 4c8b1724..8d63b50e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
cn.felord
payment-spring-boot
- 1.0.20.RELEASE
+ ${revision}
pom
4.0.0
@@ -47,7 +47,7 @@
- payment-spring-boot-1.0.18.RELEASE
+ payment-spring-boot-${project.version}
https://github.com/NotFound403/payment-spring-boot
scm:git:https://github.com/NotFound403/payment-spring-boot.git
scm:git:https://github.com/NotFound403/payment-spring-boot.git
@@ -83,14 +83,15 @@
- 1.8
- 1.8
+ 17
+ 17
UTF-8
UTF-8
- 1.8
- 2.7.7
+ 17
+ 3.2.5
4.31.7.ALL
1.78
+ 2.0.1.RELEASE