当前位置: 首页> 教育> 大学 > 易营宝智能建站_网站运营技巧_西安百度推广优化托管_拼多多推广引流软件免费

易营宝智能建站_网站运营技巧_西安百度推广优化托管_拼多多推广引流软件免费

时间:2025/8/3 8:17:14来源:https://blog.csdn.net/jg_csdn/article/details/143965508 浏览次数:0次
易营宝智能建站_网站运营技巧_西安百度推广优化托管_拼多多推广引流软件免费

AKSK接口没有固定的格式,不想basic、apikey等简单的认证方式,请求格式是固定的。最主要的就是AKSK签名认证的工具类以及服务端校验格式。

定义 AKSK 相关的常量和工具类

首先,我们创建一些常量来表示访问密钥(AK)和秘密密钥(SK),以及用于签名的算法(这里使用 HMAC - SHA256)。

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;public class AkskUtils {// 模拟的访问密钥(AK)public static final String ACCESS_KEY = "your_access_key";// 模拟的秘密密钥(SK)public static final String SECRET_KEY = "your_secret_key";// 签名算法public static final String SIGNATURE_ALGORITHM = "HMACSHA256";public static String calculateSignature(String data) throws NoSuchAlgorithmException, InvalidKeyException {Mac mac = Mac.getInstance(SIGNATURE_ALGORITHM);SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), SIGNATURE_ALGORITHM);mac.init(secretKeySpec);byte[] signatureBytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));return bytesToHex(signatureBytes);}private static String bytesToHex(byte[] bytes) {StringBuilder result = new StringBuilder();for (byte b : bytes) {result.append(String.format("%02x", b));}return result.toString();}
}

 客户端实现

客户端负责构造请求,并添加鉴权相关的信息(如签名)到请求中。

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.time.Duration;public class AkskClient {public static void main(String[] args) throws IOException, InterruptedException, NoSuchAlgorithmException, InvalidKeyException {// 构造请求数据,这里简单模拟一个查询参数String queryParam = "param1=value1&param2=value2";String requestData = "GET&/api/resource?" + queryParam;// 计算签名String signature = AkskUtils.calculateSignature(requestData);// 构造完整的请求URL,添加签名作为查询参数String url = "http://localhost:8080/api/resource?" + queryParam + "&signature=" + signature;// 构造HTTP请求HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).header("Access-Key", AkskUtils.ACCESS_KEY).timeout(Duration.ofSeconds(5)).build();// 发送请求HttpClient client = HttpClient.newHttpClient();HttpResponse<String> response = client.send(request, HttpResponse.BodyAndForestResponse<String>);// 处理响应System.out.println("Response status code: " + response.statusCode());System.out.println("Response body: " + response.body());}
}

 服务端实现

服务端负责接收客户端的请求,验证请求中的鉴权信息(如访问密钥和签名)是否合法。

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;public class AkskServer {public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {// 创建HTTP服务器,监听在本地的8080端口HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);// 设置请求处理程序server.createContext("/api/resource", new MyHandler());// 启动服务器server.start();System.out.println("Server started on port 8080");}static class MyHandler implements HttpHandler {@Overridepublic void handle(HttpExchange exchange) throws IOException {// 获取请求的查询参数String query = exchange.getRequestURI().getQuery();String[] queryParams = query.split("&");// 提取访问密钥、签名和其他参数String accessKey = null;String signature = null;String requestData = null;for (String param : queryParams) {if (param.startsWith("Access-Key=")) {accessKey = param.substring("Access-Key=".length());} else if (param.startsWith("signature=")) {signature = param.substring("signature=".length());} else {requestData = (requestData == null)? param : requestData + "&" + param;}}// 验证访问密钥是否正确if (!AkskUtils.ACCESS_KEY.equals(accessKey)) {sendErrorResponse(exchange, 401, "Invalid access key");return;}// 重新计算签名,用于和客户端传来的签名对比String calculatedSignature = AkskUtils.calculateSignature(requestData);// 验证签名是否正确if (!calculatedSignature.equals(signature)) {sendErrorResponse(exchange, 403, "Invalid signature");return;}// 如果鉴权通过,发送成功响应sendSuccessResponse(exchange);}private void sendErrorResponse(HttpExchange exchange, int statusCode, String message) throws IOException {byte[] errorBytes = message.getBytes();exchange.sendResponseHeaders(statusCode, errorBytes.length);OutputStream os = exchange.getResponseBody();os.write(errorBytes);os.close();}private void sendSuccessResponse(HttpExchange exchange) throws IOException {byte[] successBytes = "Authenticated successfully".getBytes();exchange.sendResponseHeaders(200, successBytes.length);OutputStream os = exchange.getResponseBody();os.write(successBytes);os.close();}}
}

实际应用中可能需要更复杂的处理,比如对请求数据的更规范整理、更好的错误处理、更安全的密钥管理等,但大致思想就是这样的。

关键字:易营宝智能建站_网站运营技巧_西安百度推广优化托管_拼多多推广引流软件免费

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: