103 lines
2.9 KiB
Java
103 lines
2.9 KiB
Java
package com.dayrain.component;
|
|
|
|
import com.dayrain.utils.FileUtils;
|
|
import com.sun.net.httpserver.HttpExchange;
|
|
import com.sun.net.httpserver.HttpHandler;
|
|
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.UUID;
|
|
/**
|
|
* 请求处理
|
|
* @author peng
|
|
* @date 2021/11/8
|
|
*/
|
|
public class RequestHandler implements HttpHandler {
|
|
|
|
private static final String STRING_PATTERN = "$string$";
|
|
|
|
private static final String INT_PATTERN = "$int$";
|
|
|
|
private final ServerUrl serverUrl;
|
|
|
|
public RequestHandler(ServerUrl serverUrl) {
|
|
this.serverUrl = serverUrl;
|
|
}
|
|
|
|
@Override
|
|
public void handle(HttpExchange exchange) {
|
|
RequestType requestType = serverUrl.getRequestType();
|
|
String param = null;
|
|
if (RequestType.GET.equals(requestType)) {
|
|
param = handleGetRequest(exchange);
|
|
}
|
|
|
|
if (RequestType.POST.equals(requestType)) {
|
|
param = handlePostRequest(exchange);
|
|
}
|
|
|
|
String resp = replaceResp(serverUrl.getResponseBody());
|
|
|
|
ConsoleLog.log(serverUrl, param, resp);
|
|
response(exchange, resp);
|
|
}
|
|
|
|
private String handleGetRequest(HttpExchange exchange) {
|
|
return exchange.getRequestURI().getQuery();
|
|
}
|
|
|
|
private String handlePostRequest(HttpExchange exchange) {
|
|
|
|
return FileUtils.getFromInputStream(exchange.getRequestBody());
|
|
}
|
|
|
|
private void response(HttpExchange exchange, String jsonBody) {
|
|
try {
|
|
byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8);
|
|
exchange.sendResponseHeaders(200, bytes.length);
|
|
exchange.setAttribute("Content-Type", "application/json; charset=utf-8");
|
|
OutputStream outputStream = exchange.getResponseBody();
|
|
outputStream.write(jsonBody.getBytes(StandardCharsets.UTF_8));
|
|
outputStream.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private String replaceResp(String resp) {
|
|
|
|
if (resp == null || "".equals(resp)) {
|
|
return resp;
|
|
}
|
|
|
|
Configuration configuration = ConfigHolder.get();
|
|
int stringLen = configuration.getStringLen();
|
|
int intLen = configuration.getIntLen();
|
|
|
|
while (resp.contains(STRING_PATTERN)) {
|
|
resp = resp.replace(STRING_PATTERN, randomString(stringLen));
|
|
}
|
|
|
|
while (resp.contains(INT_PATTERN)) {
|
|
resp = resp.replace(INT_PATTERN, String.valueOf(randomInt(intLen)));
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
private String randomString(int len) {
|
|
String res = UUID.randomUUID().toString();
|
|
if (len > res.length()) {
|
|
len = res.length();
|
|
}
|
|
return UUID.randomUUID().toString().substring(0, len);
|
|
}
|
|
|
|
private int randomInt(int len) {
|
|
int res = (int) Math.pow(10, len - 1);
|
|
|
|
return res + (int) (Math.pow(10, len - 1) * Math.random());
|
|
}
|
|
}
|