1.在maven引入以下依赖
<dependency>
<groupId>com.huawei.apigateway</groupId>
<artifactId>java-sdk-core</artifactId>
<version>3.2.4</version>
</dependency>
2.配置setting文件
<mirrors>
<mirror>
<id>huaweicloud</id>
<mirrorOf>*,!HuaweiCloudSDK</mirrorOf>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>
</mirrors>
<activeProfiles>
<activeProfile>MyProfile</activeProfile>
</activeProfiles>
<profile>
<id>MyProfile</id>
<repositories>
<repository>
<id>HuaweiCloudSDK</id>
<url>https://mirrors.huaweicloud.com/repository/maven/huaweicloudsdk/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>HuaweiCloudSDK</id>
<url>https://mirrors.huaweicloud.com/repository/maven/huaweicloudsdk/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
3.编写HWconstant类
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
*/
package com.example.apidemo.util;
public final class HwConstant {
public static final String HTTPS = "HTTPS";
public static final String GM_PROTOCOL = "GMTLS";
public static final String INTERNATIONAL_PROTOCOL = "TLSv1.2";
public static final String SIGNATURE_ALGORITHM_SDK_HMAC_SHA256 = "SDK-HMAC-SHA256";
public static final String SIGNATURE_ALGORITHM_SDK_HMAC_SM3 = "SDK-HMAC-SM3";
public static final String[] SUPPORTED_CIPHER_SUITES = {"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"};
private HwConstant() {
}
}
4.编写SSLCipherSuiteUtil工具类
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
*/
package com.example.apidemo.util;
import okhttp3.OkHttpClient;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.prng.SP800SecureRandomBuilder;
import org.openeuler.BGMProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
public class SSLCipherSuiteUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(SSLCipherSuiteUtil.class);
private static CloseableHttpClient httpClient;
private static OkHttpClient okHttpClient;
private static final int CIPHER_LEN = 256;
private static final int ENTROPY_BITS_REQUIRED = 384;
public static HttpClient createHttpClient(String protocol) throws Exception {
SSLContext sslContext = getSslContext(protocol);
// create factory
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
new String[]{protocol}, HwConstant.SUPPORTED_CIPHER_SUITES, new TrustAllHostnameVerifier());
httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
return httpClient;
}
public static OkHttpClient createOkHttpClient(String protocol) throws Exception {
SSLContext sslContext = getSslContext(protocol);
// Create an ssl socket factory with our all-trusting manager
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, new TrustAllManager())
.hostnameVerifier(new TrustAllHostnameVerifier());
okHttpClient = builder.connectTimeout(10, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();
return okHttpClient;
}
public static HttpURLConnection createHttpsOrHttpURLConnection(URL uUrl, String protocol) throws Exception {
// initial connection
if (uUrl.getProtocol().toUpperCase(Locale.getDefault()).equals(HwConstant.HTTPS)) {
SSLContext sslContext = getSslContext(protocol);
HttpsURLConnection.setDefaultHostnameVerifier(new TrustAllHostnameVerifier());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
return (HttpsURLConnection) uUrl.openConnection();
}
return (HttpURLConnection) uUrl.openConnection();
}
private static SSLContext getSslContext(String protocol) throws UnsupportProtocolException,
NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
if (!HwConstant.GM_PROTOCOL.equals(protocol) && !HwConstant.INTERNATIONAL_PROTOCOL.equals(protocol)) {
LOGGER.info("Unsupport protocol: {}, Only support GMTLS TLSv1.2", protocol);
throw new UnsupportProtocolException("Unsupport protocol, Only support GMTLS TLSv1.2");
}
// Create a trust manager that does not validate certificate chains
TrustAllManager[] trust = {new TrustAllManager()};
KeyManager[] kms = null;
SSLContext sslContext;
sslContext = SSLContext.getInstance(HwConstant.INTERNATIONAL_PROTOCOL, "SunJSSE");
if (HwConstant.GM_PROTOCOL.equals(protocol)) {
Security.insertProviderAt(new BGMProvider(), 1);
sslContext = SSLContext.getInstance(HwConstant.GM_PROTOCOL, "BGMProvider");
}
SecureRandom secureRandom = getSecureRandom();
sslContext.init(kms, trust, secureRandom);
sslContext.getServerSessionContext().setSessionCacheSize(8192);
sslContext.getServerSessionContext().setSessionTimeout(3600);
return sslContext;
}
// 不校验域名
private static class TrustAllHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
// 不校验服务端证书
private static class TrustAllManager implements X509TrustManager {
private X509Certificate[] issuers;
public TrustAllManager() {
this.issuers = new X509Certificate[0];
}
public X509Certificate[] getAcceptedIssuers() {
return issuers;
}
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
}
private static SecureRandom getSecureRandom() {
SecureRandom source;
try {
source = SecureRandom.getInstanceStrong();
} catch (NoSuchAlgorithmException e) {
LOGGER.error("get SecureRandom failed", e);
throw new RuntimeException("get SecureRandom failed");
}
boolean predictionResistant = true;
BlockCipher cipher = new AESEngine();
boolean reSeed = false;
return new SP800SecureRandomBuilder(source, predictionResistant).setEntropyBitsRequired(
ENTROPY_BITS_REQUIRED).buildCTR(cipher, CIPHER_LEN, null, reSeed);
}
}
5.编写UnsupportProtocolException类
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
*/
package com.example.apidemo.util;
public class UnsupportProtocolException extends Exception {
private static final long serialVersionUID = 4312820110480855928L;
private String msgDes; // 异常对应的描述信息
public UnsupportProtocolException(String message) {
super(message);
msgDes = message;
}
}
6.HwModelArtsDemo测试
package com.example.apidemo.util;
import cn.hutool.json.JSONArray;
import com.cloud.apigateway.sdk.utils.Client;
import com.cloud.apigateway.sdk.utils.Request;
import okhttp3.OkHttpClient;
import okhttp3.Response;
import okhttp3.ResponseBody;
/**
* hw模型arts工具类
*
* @author
* @date 2023/10/24
*/
public class HwModelArtsDemo {
private final static String HW_MODELARTS_URL = "";
private final static String HW_KEY ="";
private final static String HW_SECRET = "";
/**
* 获取hw模型分数
*
* @param json json
* @return {@link Double}
*/
public static Double getHwModelScore(String json) {
// Create a new request.
Request request = new Request();
try {
request.setKey(HW_KEY);
request.setSecret(HW_SECRET);
request.setMethod("POST");
request.setUrl(HW_MODELARTS_URL);
request.addHeader("Content-Type", "application/json");
request.setBody(json);
} catch (Exception e) {
return null;
}
try {
// Sign the request.
okhttp3.Request signedRequest = Client.signOkhttp(request, HwConstant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256);
// creat okhttpClient.
OkHttpClient client = SSLCipherSuiteUtil.createOkHttpClient(HwConstant.INTERNATIONAL_PROTOCOL);
// Send the request.
Response response = client.newCall(signedRequest).execute();
// Print the status line of the response.
// Print the body of the response.
ResponseBody resEntity = response.body();
String data = resEntity.string();
JSONArray jsonArray = new JSONArray(data);
Double predictresult = jsonArray.getJSONObject(0).getDouble("predictresult");
return predictresult;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
Double hwModelArts = getHwModelScore("");
System.out.println(hwModelArts);
}
}
华为云官方文档:
https://console.huaweicloud.com/apiexplorer/#/openapi/overview