diff --git a/.gitignore b/.gitignore
index 82d6349..a45af58 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@ gradlew
gradlew.bat
unused.txt
/web-service/src/main/generated/
+/db
diff --git a/README.md b/README.md
index 7d88c05..9a6b50e 100644
--- a/README.md
+++ b/README.md
@@ -158,9 +158,9 @@ mvn package
> 注意: netdisk-fast-download.service中的ExecStart的路径改为实际路径
```shell
cd ~
-wget -O netdisk-fast-download-0.1.6-bin.zip https://github.com/qaiu/netdisk-fast-download/releases/download/0.1.6-releases/netdisk-fast-download-0.1.6-bin.zip
-unzip netdisk-fast-download-*-bin.zip
-cd netdisk-fast-download-*-bin
+wget -O netdisk-fast-download.zip https://github.com/qaiu/netdisk-fast-download/releases/download/0.1.7/netdisk-fast-download.zip
+unzip netdisk-fast-download.zip
+cd netdisk-fast-download
bash service-install.sh
```
服务相关命令:
@@ -184,8 +184,8 @@ systemctl enable netdisk-fast-download.servic
systemctl disable netdisk-fast-download.servic
## Windows服务部署
-1. 下载并解压releases版本netdisk-fast-download-0.1.6-bin.zip
-2. 进入netdisk-fast-download-0.1.6-bin目录
+1. 下载并解压releases版本netdisk-fast-download.zip
+2. 进入netdisk-fast-download下的bin目录
3. 使用管理员权限运行nfd-service-install.bat
如果不想使用服务运行可以直接运行run.bat
> 注意: 如果jdk环境变量的java版本不是17请修改nfd-service-template.xml中的java命令的路径改为实际路径
diff --git a/bin/netdisk-fast-download.service b/bin/netdisk-fast-download.service
index 55716dc..50ae18f 100644
--- a/bin/netdisk-fast-download.service
+++ b/bin/netdisk-fast-download.service
@@ -8,7 +8,7 @@ Wants=network-online.target
Type=simple
# User=USER
# 需要JDK17及以上版本 注意修改为自己的路径
-ExecStart=/root/java/jdk-17.0.2/bin/java -server -Xmx128m -jar /root/java/netdisk-fast-download-0.1.6/netdisk-fast-download-0.1.6.jar
+ExecStart=/root/java/jdk-17.0.2/bin/java -server -Xmx128m -jar /root/java/netdisk-fast-download/netdisk-fast-download.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
diff --git a/bin/nfd-service-install.bat b/bin/nfd-service-install.bat
index 8940941..7244ba9 100644
--- a/bin/nfd-service-install.bat
+++ b/bin/nfd-service-install.bat
@@ -7,7 +7,7 @@ pushd %~dp0
set MY_DIR=%~dp0
set MY_DIR=%MY_DIR:~0,-1%
-for /f "delims=X" %%i in ('dir /b %MY_DIR%\netdisk-fast-download-*.jar') do (
+for /f "delims=X" %%i in ('dir /b %MY_DIR%\netdisk-fast-download.jar') do (
set LAUNCH_JAR=%MY_DIR%\%%i
)
diff --git a/bin/run.bat b/bin/run.bat
index 052fc0e..cb2f28c 100644
--- a/bin/run.bat
+++ b/bin/run.bat
@@ -1,7 +1,7 @@
@echo off && @chcp 65001 > nul
pushd %~dp0
set LIB_DIR=%~dp0
-for /f "delims=X" %%i in ('dir /b %LIB_DIR%\netdisk-fast-download-*.jar') do (
+for /f "delims=X" %%i in ('dir /b %LIB_DIR%\netdisk-fast-download.jar') do (
set LAUNCH_JAR=%LIB_DIR%%%i
)
diff --git a/bin/run.sh b/bin/run.sh
index 903c130..06e7c53 100644
--- a/bin/run.sh
+++ b/bin/run.sh
@@ -1,6 +1,6 @@
#!/bin/bash
# set -x
-LAUNCH_JAR="netdisk-fast-download-0.1.6.jar"
+LAUNCH_JAR="netdisk-fast-download.jar"
nohup java -Xmx512M -jar "$LAUNCH_JAR" "$@" >startup.log 2>&1 &
tail -f startup.log
diff --git a/core-database/pom.xml b/core-database/pom.xml
index 17389bf..8ae9b06 100644
--- a/core-database/pom.xml
+++ b/core-database/pom.xml
@@ -5,7 +5,7 @@
netdisk-fast-download
cn.qaiu
- 0.1.6
+ 0.1.7
4.0.0
diff --git a/core-database/src/main/java/cn/qaiu/StartH2DatabaseServer.java b/core-database/src/main/java/cn/qaiu/StartH2DatabaseServer.java
index 5c52135..8d5ee95 100644
--- a/core-database/src/main/java/cn/qaiu/StartH2DatabaseServer.java
+++ b/core-database/src/main/java/cn/qaiu/StartH2DatabaseServer.java
@@ -1,7 +1,7 @@
package cn.qaiu;
public class StartH2DatabaseServer {
- public static void main(String[] args) {
- System.out.println("Hello world!");
- }
+
+
+
}
diff --git a/core-database/src/main/java/cn/qaiu/db/ddl/CreateTable.java b/core-database/src/main/java/cn/qaiu/db/ddl/CreateTable.java
index a039ae7..093cbc4 100644
--- a/core-database/src/main/java/cn/qaiu/db/ddl/CreateTable.java
+++ b/core-database/src/main/java/cn/qaiu/db/ddl/CreateTable.java
@@ -38,6 +38,7 @@ public class CreateTable {
javaProperty2SqlColumnMap.put(Boolean.class, "BOOLEAN");
javaProperty2SqlColumnMap.put(String.class, "VARCHAR");
javaProperty2SqlColumnMap.put(java.util.Date.class, "TIMESTAMP");
+ javaProperty2SqlColumnMap.put(java.time.LocalDateTime.class, "TIMESTAMP");
javaProperty2SqlColumnMap.put(java.sql.Timestamp.class, "TIMESTAMP");
javaProperty2SqlColumnMap.put(java.sql.Date.class, "DATE");
javaProperty2SqlColumnMap.put(java.sql.Time.class, "TIME");
diff --git a/core/pom.xml b/core/pom.xml
index 9ff9aa4..0c6fb90 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,22 +5,14 @@
netdisk-fast-download
cn.qaiu
- 0.1.6
+ 0.1.7
4.0.0
1.0.8
core
- 17
UTF-8
- 4.4.1
- 0.10.2
- 1.18.12
- 2.0.5
- 3.12.0
- 2.14.2
- 1.4.6
@@ -91,6 +83,12 @@
jackson-databind
${jackson.version}
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ ${jackson.version}
+
+
diff --git a/core/src/main/java/cn/qaiu/vx/core/Deploy.java b/core/src/main/java/cn/qaiu/vx/core/Deploy.java
index 53a15d6..c25e5c3 100644
--- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java
+++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java
@@ -44,6 +44,11 @@ public final class Deploy {
return INSTANCE;
}
+ /**
+ *
+ * @param args 启动参数
+ * @param handle 启动完成后回调处理函数
+ */
public void start(String[] args, Handler handle) {
this.mainThread = Thread.currentThread();
this.handle = handle;
diff --git a/core/src/main/java/cn/qaiu/vx/core/base/BaseHttpApi.java b/core/src/main/java/cn/qaiu/vx/core/base/BaseHttpApi.java
index f9a5ca2..2e324e7 100644
--- a/core/src/main/java/cn/qaiu/vx/core/base/BaseHttpApi.java
+++ b/core/src/main/java/cn/qaiu/vx/core/base/BaseHttpApi.java
@@ -1,12 +1,16 @@
package cn.qaiu.vx.core.base;
import cn.qaiu.vx.core.interceptor.AfterInterceptor;
+import cn.qaiu.vx.core.model.JsonResult;
+import cn.qaiu.vx.core.util.CommonUtil;
+import cn.qaiu.vx.core.util.ReflectionUtil;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.RoutingContext;
+import org.reflections.Reflections;
import java.util.Set;
-import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
+import static cn.qaiu.vx.core.util.ResponseUtil.*;
/**
* 统一响应处理
@@ -16,43 +20,43 @@ import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
*/
public interface BaseHttpApi {
- default Set getAfterInterceptor() {
- return null;
- }
+ // 需要扫描注册的Router路径
+ Reflections reflections = ReflectionUtil.getReflections();
- default void fireJsonResponse(RoutingContext ctx, JsonObject jsonResult) {
- ctx.response().putHeader(CONTENT_TYPE, "application/json; charset=utf-8")
- .setStatusCode(200)
- .end(jsonResult.encode());
- }
-
- default void fireJsonResponse(RoutingContext ctx, T jsonResult) {
- JsonObject jsonObject = JsonObject.mapFrom(jsonResult);
+ default void doFireJsonObjectResponse(RoutingContext ctx, JsonObject jsonObject) {
if (!ctx.response().ended()) {
- fireJsonResponse(ctx, jsonObject);
+ fireJsonObjectResponse(ctx, jsonObject);
}
handleAfterInterceptor(ctx, jsonObject);
}
- default void handleAfterInterceptor(RoutingContext ctx, JsonObject jsonObject){
+
+ default void doFireJsonResultResponse(RoutingContext ctx, JsonResult jsonResult) {
+ if (!ctx.response().ended()) {
+ fireJsonResultResponse(ctx, jsonResult);
+ }
+ handleAfterInterceptor(ctx, jsonResult.toJsonObject());
+ }
+
+
+ default Set getAfterInterceptor() {
+
+ Set> afterInterceptorClassSet =
+ reflections.getSubTypesOf(AfterInterceptor.class);
+ if (afterInterceptorClassSet == null) {
+ return null;
+ }
+ return CommonUtil.sortClassSet(afterInterceptorClassSet);
+ }
+
+ default void handleAfterInterceptor(RoutingContext ctx, JsonObject jsonObject) {
Set afterInterceptor = getAfterInterceptor();
if (afterInterceptor != null) {
- afterInterceptor.forEach(ai -> ai.handle(ctx.request(), jsonObject));
+ afterInterceptor.forEach(ai -> ai.handle(ctx, jsonObject));
}
if (!ctx.response().ended()) {
- fireJsonResponse(ctx, "handleAfterInterceptor end.");
+ fireTextResponse(ctx, "handleAfterInterceptor: response not end");
}
}
- default void fireTextResponse(RoutingContext ctx, String text) {
- ctx.response().putHeader(CONTENT_TYPE, "text/html; charset=utf-8").end(text);
- Set afterInterceptor = getAfterInterceptor();
- if (afterInterceptor != null) {
- afterInterceptor.forEach(ai -> ai.handle(ctx.request(), new JsonObject().put("text", text)));
- }
- }
-
- default void sendError(int statusCode, RoutingContext ctx) {
- ctx.response().setStatusCode(statusCode).end();
- }
}
diff --git a/core/src/main/java/cn/qaiu/vx/core/handlerfactory/RouterHandlerFactory.java b/core/src/main/java/cn/qaiu/vx/core/handlerfactory/RouterHandlerFactory.java
index dab1951..1ae027c 100644
--- a/core/src/main/java/cn/qaiu/vx/core/handlerfactory/RouterHandlerFactory.java
+++ b/core/src/main/java/cn/qaiu/vx/core/handlerfactory/RouterHandlerFactory.java
@@ -1,11 +1,14 @@
package cn.qaiu.vx.core.handlerfactory;
-import cn.qaiu.vx.core.annotaions.*;
+import cn.qaiu.vx.core.annotaions.DateFormat;
+import cn.qaiu.vx.core.annotaions.RouteHandler;
+import cn.qaiu.vx.core.annotaions.RouteMapping;
+import cn.qaiu.vx.core.annotaions.SockRouteMapper;
import cn.qaiu.vx.core.base.BaseHttpApi;
-import cn.qaiu.vx.core.interceptor.AfterInterceptor;
import cn.qaiu.vx.core.interceptor.BeforeInterceptor;
import cn.qaiu.vx.core.model.JsonResult;
import cn.qaiu.vx.core.util.*;
+import io.netty.handler.codec.http.HttpHeaderValues;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.MultiMap;
@@ -17,16 +20,12 @@ import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
-import io.vertx.ext.web.handler.BodyHandler;
-import io.vertx.ext.web.handler.CorsHandler;
-import io.vertx.ext.web.handler.StaticHandler;
-import io.vertx.ext.web.handler.TimeoutHandler;
+import io.vertx.ext.web.handler.*;
import io.vertx.ext.web.handler.sockjs.SockJSHandler;
import io.vertx.ext.web.handler.sockjs.SockJSHandlerOptions;
import javassist.CtClass;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
-import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,14 +56,11 @@ public class RouterHandlerFactory implements BaseHttpApi {
add(HttpMethod.DELETE);
add(HttpMethod.HEAD);
}};
- // 需要扫描注册的Router路径
- private static volatile Reflections reflections;
private final String gatewayPrefix;
public RouterHandlerFactory(String gatewayPrefix) {
Objects.requireNonNull(gatewayPrefix, "The gateway prefix is empty.");
- reflections = ReflectionUtil.getReflections();
this.gatewayPrefix = gatewayPrefix;
}
@@ -130,7 +126,7 @@ public class RouterHandlerFactory implements BaseHttpApi {
LOGGER.error("Manually Register Handler Fail, Error details:" + e.getMessage());
}
// 错误请求处理
- mainRouter.errorHandler(405, ctx -> fireJsonResponse(ctx, JsonResult
+ mainRouter.errorHandler(405, ctx -> doFireJsonResultResponse(ctx, JsonResult
.error("Method Not Allowed", 405)));
mainRouter.errorHandler(404, ctx -> ctx.response().setStatusCode(404).setChunked(true)
.end("Internal server error: 404 not found"));
@@ -165,7 +161,7 @@ public class RouterHandlerFactory implements BaseHttpApi {
// 普通路由
RouteMapping mapping = method.getAnnotation(RouteMapping.class);
HttpMethod routeMethod = HttpMethod.valueOf(mapping.method().name());
- String routeUrl = getRouteUrl(method.getName(), mapping.value());
+ String routeUrl = getRouteUrl(mapping.value());
String url = root.concat(routeUrl);
// 匹配方法
Route route = router.route(routeMethod, url);
@@ -177,15 +173,16 @@ public class RouterHandlerFactory implements BaseHttpApi {
// 设置默认超时
route.handler(TimeoutHandler.create(SharedDataUtil.getCustomConfig().getInteger(ROUTE_TIME_OUT)));
+ route.handler(ResponseTimeHandler.create());
route.handler(ctx -> handlerMethod(instance, method, ctx)).failureHandler(ctx -> {
if (ctx.response().ended()) return;
ctx.failure().printStackTrace();
- fireJsonResponse(ctx, JsonResult.error(ctx.failure().getMessage(), 500));
+ doFireJsonResultResponse(ctx, JsonResult.error(ctx.failure().getMessage(), 500));
});
} else if (method.isAnnotationPresent(SockRouteMapper.class)) {
// websocket 基于sockJs
SockRouteMapper mapping = method.getAnnotation(SockRouteMapper.class);
- String routeUrl = getRouteUrl(method.getName(), mapping.value());
+ String routeUrl = getRouteUrl(mapping.value());
String url = root.concat(routeUrl);
LOGGER.info("Register New Websocket Handler -> {}", url);
SockJSHandlerOptions options = new SockJSHandlerOptions()
@@ -212,10 +209,9 @@ public class RouterHandlerFactory implements BaseHttpApi {
/**
* 获取并处理路由URL分隔符
*
- * @param methodName 路由method
* @return String
*/
- private String getRouteUrl(String methodName, String mapperValue) {
+ private String getRouteUrl(String mapperValue) {
String routeUrl;
if ("/".equals(mapperValue)) {
routeUrl = mapperValue;
@@ -231,7 +227,6 @@ public class RouterHandlerFactory implements BaseHttpApi {
* 配置拦截
*
* @return Handler
- * @throws Throwable Throwable
*/
private Set> getInterceptorSet() {
// 配置拦截
@@ -257,7 +252,7 @@ public class RouterHandlerFactory implements BaseHttpApi {
if (handler.isAnnotationPresent(RouteHandler.class)) {
RouteHandler routeHandler = handler.getAnnotation(RouteHandler.class);
String value = routeHandler.value();
- root += ("/".equals(value) ? "" : value);
+ root += (value.startsWith("/") ? value.substring(1) : value);
}
if (!root.endsWith("/")) {
root = root + "/";
@@ -300,37 +295,12 @@ public class RouterHandlerFactory implements BaseHttpApi {
});
}
- final MultiMap queryParams = ctx.queryParams();
- if ("POST".equals(ctx.request().method().name())) {
- queryParams.addAll(ctx.request().params());
- }
-
JsonArray entityPackagesReg = SharedDataUtil.getJsonArrayForCustomConfig("entityPackagesReg");
- // 绑定get或post请求头的请求参数
- methodParametersTemp.forEach((k, v) -> {
- if (ReflectionUtil.isBasicType(v.getRight())) {
- String fmt = getFmt(v.getLeft(), v.getRight());
- String value = queryParams.get(k);
- parameterValueList.put(k, ReflectionUtil.conversion(v.getRight(), value, fmt));
- } else if (RoutingContext.class.getName().equals(v.getRight().getName())) {
- parameterValueList.put(k, ctx);
- } else if (HttpServerRequest.class.getName().equals(v.getRight().getName())) {
- parameterValueList.put(k, ctx.request());
- } else if (HttpServerResponse.class.getName().equals(v.getRight().getName())) {
- parameterValueList.put(k, ctx.response());
- } else if (CommonUtil.matchRegList(entityPackagesReg.getList(), v.getRight().getName())) {
- // 绑定实体类
- try {
- Class> aClass = Class.forName(v.getRight().getName());
- Object entity = ParamUtil.multiMapToEntity(queryParams, aClass);
- parameterValueList.put(k, entity);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
+
+ final MultiMap queryParams = ctx.queryParams();
// 解析body-json参数
- if ("application/json".equals(ctx.parsedHeaders().contentType().value()) && ctx.body().asJsonObject() != null) {
+ if (HttpHeaderValues.APPLICATION_JSON.toString().equals(ctx.parsedHeaders().contentType().value())
+ && ctx.body().asJsonObject() != null) {
JsonObject body = ctx.body().asJsonObject();
if (body != null) {
methodParametersTemp.forEach((k, v) -> {
@@ -350,28 +320,66 @@ public class RouterHandlerFactory implements BaseHttpApi {
}
});
}
+ } else if (ctx.body() != null) {
+ queryParams.addAll(ParamUtil.paramsToMap(ctx.body().asString()));
}
+
+ // 解析其他参数
+ if ("POST".equals(ctx.request().method().name())) {
+ queryParams.addAll(ctx.request().params());
+ }
+ // 绑定get或post请求头的请求参数
+ methodParametersTemp.forEach((k, v) -> {
+ if (ReflectionUtil.isBasicType(v.getRight())) {
+ String fmt = getFmt(v.getLeft(), v.getRight());
+ String value = queryParams.get(k);
+ parameterValueList.put(k, ReflectionUtil.conversion(v.getRight(), value, fmt));
+ } else if (RoutingContext.class.getName().equals(v.getRight().getName())) {
+ parameterValueList.put(k, ctx);
+ } else if (HttpServerRequest.class.getName().equals(v.getRight().getName())) {
+ parameterValueList.put(k, ctx.request());
+ } else if (HttpServerResponse.class.getName().equals(v.getRight().getName())) {
+ parameterValueList.put(k, ctx.response());
+ } else if (parameterValueList.get(k) == null
+ && CommonUtil.matchRegList(entityPackagesReg.getList(), v.getRight().getName())) {
+ // 绑定实体类
+ try {
+ Class> aClass = Class.forName(v.getRight().getName());
+ Object entity = ParamUtil.multiMapToEntity(queryParams, aClass);
+ parameterValueList.put(k, entity);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
// 调用handle 获取响应对象
Object[] parameterValueArray = parameterValueList.values().toArray(new Object[0]);
try {
// 反射调用
Object data = ReflectionUtil.invokeWithArguments(method, instance, parameterValueArray);
if (data != null) {
+
if (data instanceof JsonResult) {
- fireJsonResponse(ctx, data);
+ doFireJsonResultResponse(ctx, (JsonResult>) data);
+ }
+ if (data instanceof JsonObject) {
+ doFireJsonObjectResponse(ctx, ((JsonObject) data));
} else if (data instanceof Future) { // 处理异步响应
((Future>) data).onSuccess(res -> {
+ if (res instanceof JsonResult) {
+ doFireJsonResultResponse(ctx, (JsonResult>) res);
+ }
if (res instanceof JsonObject) {
- fireJsonResponse(ctx, res);
+ doFireJsonObjectResponse(ctx, ((JsonObject) res));
} else if (res != null) {
- fireJsonResponse(ctx, JsonResult.data(res));
+ doFireJsonResultResponse(ctx, JsonResult.data(res));
} else {
handleAfterInterceptor(ctx, null);
}
- }).onFailure(e -> fireJsonResponse(ctx, JsonResult.error(e.getMessage())));
+ }).onFailure(e -> doFireJsonResultResponse(ctx, JsonResult.error(e.getMessage())));
} else {
- fireTextResponse(ctx, data.toString());
+ doFireJsonResultResponse(ctx, JsonResult.data(data));
}
}
} catch (Throwable e) {
@@ -384,7 +392,7 @@ public class RouterHandlerFactory implements BaseHttpApi {
err = e.getCause().getMessage();
}
}
- fireJsonResponse(ctx, JsonResult.error(err));
+ doFireJsonResultResponse(ctx, JsonResult.error(err));
}
}
@@ -403,16 +411,6 @@ public class RouterHandlerFactory implements BaseHttpApi {
return fmt;
}
- @Override
- public Set getAfterInterceptor() {
- Set> afterInterceptorClassSet =
- reflections.getSubTypesOf(AfterInterceptor.class);
- if (afterInterceptorClassSet == null) {
- return null;
- }
- return CommonUtil.sortClassSet(afterInterceptorClassSet);
- }
-
private Set getBeforeInterceptor() {
Set> interceptorClassSet =
reflections.getSubTypesOf(BeforeInterceptor.class);
diff --git a/core/src/main/java/cn/qaiu/vx/core/interceptor/AfterInterceptor.java b/core/src/main/java/cn/qaiu/vx/core/interceptor/AfterInterceptor.java
index b479663..cb39442 100644
--- a/core/src/main/java/cn/qaiu/vx/core/interceptor/AfterInterceptor.java
+++ b/core/src/main/java/cn/qaiu/vx/core/interceptor/AfterInterceptor.java
@@ -1,7 +1,7 @@
package cn.qaiu.vx.core.interceptor;
-import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.json.JsonObject;
+import io.vertx.ext.web.RoutingContext;
/**
* 后置拦截器接口
@@ -10,6 +10,6 @@ import io.vertx.core.json.JsonObject;
*/
public interface AfterInterceptor {
- void handle(HttpServerRequest request, JsonObject responseData);
+ void handle(RoutingContext ctx, JsonObject responseData);
}
diff --git a/core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java b/core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java
index c5470e7..0904a03 100644
--- a/core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java
+++ b/core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java
@@ -3,15 +3,30 @@ package cn.qaiu.vx.core.interceptor;
import io.vertx.core.Handler;
import io.vertx.ext.web.RoutingContext;
+import static cn.qaiu.vx.core.util.ResponseUtil.sendError;
+
/**
* 前置拦截器接口
*
* @author QAIU
*/
-public interface BeforeInterceptor {
+public interface BeforeInterceptor extends Handler {
+ String IS_NEXT = "RoutingContextIsNext";
default Handler doHandle() {
- return this::handle;
+
+ return ctx -> {
+ ctx.put(IS_NEXT, false);
+ BeforeInterceptor.this.handle(ctx);
+ if (!(Boolean) ctx.get(IS_NEXT) && !ctx.response().ended()) {
+ sendError(ctx, 403);
+ }
+ };
+ }
+
+ default void doNext(RoutingContext context) {
+ context.put(IS_NEXT, true);
+ context.next();
}
void handle(RoutingContext context);
diff --git a/core/src/main/java/cn/qaiu/vx/core/model/JsonResult.java b/core/src/main/java/cn/qaiu/vx/core/model/JsonResult.java
index 11bfae4..183c47d 100644
--- a/core/src/main/java/cn/qaiu/vx/core/model/JsonResult.java
+++ b/core/src/main/java/cn/qaiu/vx/core/model/JsonResult.java
@@ -1,6 +1,9 @@
package cn.qaiu.vx.core.model;
+import cn.qaiu.vx.core.util.CastUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.vertx.core.json.JsonObject;
import org.apache.commons.lang3.StringUtils;
import java.io.Serial;
@@ -159,4 +162,16 @@ public class JsonResult implements Serializable {
public static JsonResult success() {
return new JsonResult<>(SUCCESS_CODE, SUCCESS_MESSAGE, true, null);
}
+
+ // 转为json对象
+ public JsonObject toJsonObject() {
+ return JsonObject.mapFrom(this);
+ }
+
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ // 转为json对象
+ public static JsonResult> toJsonResult(JsonObject json) {
+ return CastUtil.cast(json.mapTo(JsonResult.class));
+ }
}
diff --git a/core/src/main/java/cn/qaiu/vx/core/util/ParamUtil.java b/core/src/main/java/cn/qaiu/vx/core/util/ParamUtil.java
index 58bf7a3..13ee131 100644
--- a/core/src/main/java/cn/qaiu/vx/core/util/ParamUtil.java
+++ b/core/src/main/java/cn/qaiu/vx/core/util/ParamUtil.java
@@ -27,12 +27,12 @@ public final class ParamUtil {
return map;
}
- public static T multiMapToEntity(MultiMap multiMap,Class tClass) throws NoSuchMethodException {
- Map map = multiMapToMap(multiMap);
+ public static T multiMapToEntity(MultiMap multiMap, Class tClass) throws NoSuchMethodException {
+ Map map = multiMapToMap(multiMap);
T obj = null;
try {
obj = tClass.getDeclaredConstructor().newInstance();
- BeanUtils.populate(obj,map);
+ BeanUtils.populate(obj, map);
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
LOGGER.error("实例化异常");
@@ -42,4 +42,21 @@ public final class ParamUtil {
}
return obj;
}
+
+ public static MultiMap paramsToMap(String paramString) {
+ MultiMap entries = MultiMap.caseInsensitiveMultiMap();
+ if (paramString == null) return entries;
+ String[] params = paramString.split("&");
+ if (params.length == 0) return entries;
+ for (String param : params) {
+ String[] kv = param.split("=");
+ if (kv.length == 2) {
+ entries.set(kv[0], kv[1]);
+ } else {
+ entries.set(kv[0], "");
+ }
+ }
+ return entries;
+ }
+
}
diff --git a/core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java b/core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
index 538f34f..1fa68e4 100644
--- a/core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
+++ b/core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
@@ -1,8 +1,13 @@
package cn.qaiu.vx.core.util;
+import cn.qaiu.vx.core.model.JsonResult;
import io.vertx.core.Promise;
import io.vertx.core.http.HttpHeaders;
import io.vertx.core.http.HttpServerResponse;
+import io.vertx.core.json.JsonObject;
+import io.vertx.ext.web.RoutingContext;
+
+import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
public class ResponseUtil {
@@ -14,4 +19,22 @@ public class ResponseUtil {
redirect(response, url);
promise.complete();
}
+
+ public static void fireJsonObjectResponse(RoutingContext ctx, JsonObject jsonObject) {
+ ctx.response().putHeader(CONTENT_TYPE, "application/json; charset=utf-8")
+ .setStatusCode(200)
+ .end(jsonObject.encode());
+ }
+
+ public static void fireJsonResultResponse(RoutingContext ctx, JsonResult jsonResult) {
+ fireJsonObjectResponse(ctx, jsonResult.toJsonObject());
+ }
+
+ public static void fireTextResponse(RoutingContext ctx, String text) {
+ ctx.response().putHeader(CONTENT_TYPE, "text/html; charset=utf-8").end(text);
+ }
+
+ public static void sendError(RoutingContext ctx, int statusCode) {
+ ctx.response().setStatusCode(statusCode).end();
+ }
}
diff --git a/parser/pom.xml b/parser/pom.xml
new file mode 100644
index 0000000..abebf36
--- /dev/null
+++ b/parser/pom.xml
@@ -0,0 +1,68 @@
+
+
+
+ netdisk-fast-download
+ cn.qaiu
+ 0.1.7
+
+ 4.0.0
+
+ parser
+
+
+ UTF-8
+
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ io.vertx
+ vertx-web-client
+ ${vertx.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+ org.openjdk.nashorn
+ nashorn-core
+ 15.4
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+
+
diff --git a/parser/src/main/java/cn/qaiu/WebClientVertxInit.java b/parser/src/main/java/cn/qaiu/WebClientVertxInit.java
new file mode 100644
index 0000000..6ba2e30
--- /dev/null
+++ b/parser/src/main/java/cn/qaiu/WebClientVertxInit.java
@@ -0,0 +1,19 @@
+package cn.qaiu;
+
+import io.vertx.core.Vertx;
+
+public class WebClientVertxInit {
+ private Vertx vertx = null;
+ private static final WebClientVertxInit INSTANCE = new WebClientVertxInit();
+
+ public static void init(Vertx vx) {
+ INSTANCE.vertx = vx;
+ }
+
+ public static Vertx get() {
+ if (INSTANCE.vertx == null) {
+ throw new IllegalArgumentException("VertxInit getVertx: vertx is null");
+ }
+ return INSTANCE.vertx;
+ }
+}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java b/parser/src/main/java/cn/qaiu/parser/IPanTool.java
similarity index 93%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java
rename to parser/src/main/java/cn/qaiu/parser/IPanTool.java
index e0c081f..5d1186a 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/IPanTool.java
@@ -1,6 +1,6 @@
-package cn.qaiu.lz.common.parser;//package cn.qaiu.lz.common.parser;
+package cn.qaiu.parser;//package cn.qaiu.lz.common.parser;
-import cn.qaiu.lz.common.parser.impl.*;
+import cn.qaiu.parser.impl.*;
import io.vertx.core.Future;
public interface IPanTool {
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/PanBase.java b/parser/src/main/java/cn/qaiu/parser/PanBase.java
similarity index 88%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/PanBase.java
rename to parser/src/main/java/cn/qaiu/parser/PanBase.java
index 2948120..27287a9 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/PanBase.java
+++ b/parser/src/main/java/cn/qaiu/parser/PanBase.java
@@ -1,6 +1,6 @@
-package cn.qaiu.lz.common.parser;
+package cn.qaiu.parser;
-import cn.qaiu.vx.core.util.VertxHolder;
+import cn.qaiu.WebClientVertxInit;
import io.vertx.core.Handler;
import io.vertx.core.Promise;
import io.vertx.ext.web.client.WebClient;
@@ -13,8 +13,8 @@ public abstract class PanBase {
protected Promise promise = Promise.promise();
- protected WebClient client = WebClient.create(VertxHolder.getVertxInstance());
- protected WebClient clientNoRedirects = WebClient.create(VertxHolder.getVertxInstance(), OPTIONS);
+ protected WebClient client = WebClient.create(WebClientVertxInit.get());
+ protected WebClient clientNoRedirects = WebClient.create(WebClientVertxInit.get(), OPTIONS);
private static final WebClientOptions OPTIONS = new WebClientOptions().setFollowRedirects(false);
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/PanType.java b/parser/src/main/java/cn/qaiu/parser/PanType.java
similarity index 67%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/PanType.java
rename to parser/src/main/java/cn/qaiu/parser/PanType.java
index 7c298ac..87fead6 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/PanType.java
+++ b/parser/src/main/java/cn/qaiu/parser/PanType.java
@@ -1,6 +1,4 @@
-package cn.qaiu.lz.common.parser;
-
-import cn.qaiu.lz.common.parser.impl.LzTool;
+package cn.qaiu.parser;
/**
* @author QAIU
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java b/parser/src/main/java/cn/qaiu/parser/impl/CowTool.java
similarity index 94%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/CowTool.java
index 0e25640..04cd58c 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/CowTool.java
@@ -1,8 +1,8 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.CommonUtils;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.CommonUtils;
import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import org.apache.commons.lang3.StringUtils;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java b/parser/src/main/java/cn/qaiu/parser/impl/EcTool.java
similarity index 94%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/EcTool.java
index 2f156ba..f84afc1 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/EcTool.java
@@ -1,8 +1,8 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.CommonUtils;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.CommonUtils;
import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java b/parser/src/main/java/cn/qaiu/parser/impl/FcTool.java
similarity index 96%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/FcTool.java
index e0e9aa7..138eb68 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/FcTool.java
@@ -1,8 +1,8 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.CommonUtils;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.CommonUtils;
import io.vertx.core.Future;
import io.vertx.core.MultiMap;
import io.vertx.core.Promise;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java b/parser/src/main/java/cn/qaiu/parser/impl/FjTool.java
similarity index 87%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/FjTool.java
index 9d0d4b4..1e3c3f0 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/FjTool.java
@@ -1,15 +1,13 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.AESUtils;
-import cn.qaiu.lz.common.util.CommonUtils;
-import cn.qaiu.vx.core.util.VertxHolder;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.AESUtils;
+import cn.qaiu.util.CommonUtils;
import io.vertx.core.Future;
import io.vertx.core.MultiMap;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.WebClient;
-import io.vertx.ext.web.client.WebClientOptions;
import io.vertx.uritemplate.UriTemplate;
import java.util.UUID;
@@ -37,8 +35,7 @@ public class FjTool extends PanBase implements IPanTool {
public Future parse() {
String dataKey = CommonUtils.adaptShortPaths(SHARE_URL_PREFIX, key);
- WebClient client = WebClient.create(VertxHolder.getVertxInstance(),
- new WebClientOptions().setFollowRedirects(false));
+ WebClient client = clientNoRedirects;
String shareId = String.valueOf(AESUtils.idEncrypt(dataKey));
// 第一次请求 获取文件信息
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java b/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java
similarity index 92%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/LzTool.java
index 0e69ebc..5a2a5e1 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java
@@ -1,15 +1,13 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.JsExecUtils;
-import cn.qaiu.vx.core.util.VertxHolder;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.JsExecUtils;
import io.vertx.core.Future;
import io.vertx.core.MultiMap;
import io.vertx.core.Promise;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.WebClient;
-import io.vertx.ext.web.client.WebClientOptions;
import org.openjdk.nashorn.api.scripting.ScriptObjectMirror;
import javax.script.ScriptException;
@@ -37,8 +35,7 @@ public class LzTool extends PanBase implements IPanTool {
public Future parse() {
String sUrl = key.startsWith("https://") ? key : SHARE_URL_PREFIX + "/" + key;
- WebClient client = WebClient.create(VertxHolder.getVertxInstance(),
- new WebClientOptions().setFollowRedirects(false));
+ WebClient client = clientNoRedirects;
client.getAbs(sUrl).send().onSuccess(res -> {
String html = res.bodyAsString();
// 匹配iframe
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java b/parser/src/main/java/cn/qaiu/parser/impl/QkTool.java
similarity index 75%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/QkTool.java
index 7df7550..1635e68 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/QkTool.java
@@ -1,7 +1,7 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
import io.vertx.core.Future;
import io.vertx.core.Promise;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java b/parser/src/main/java/cn/qaiu/parser/impl/UcTool.java
similarity index 96%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/UcTool.java
index dd90d62..bf80bf5 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/UcTool.java
@@ -1,8 +1,8 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.CommonUtils;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.CommonUtils;
import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java b/parser/src/main/java/cn/qaiu/parser/impl/YeTool.java
similarity index 97%
rename from web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java
rename to parser/src/main/java/cn/qaiu/parser/impl/YeTool.java
index 51f12b7..35703fe 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/YeTool.java
@@ -1,9 +1,9 @@
-package cn.qaiu.lz.common.parser.impl;
+package cn.qaiu.parser.impl;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.PanBase;
-import cn.qaiu.lz.common.util.CommonUtils;
-import cn.qaiu.lz.common.util.JsExecUtils;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.CommonUtils;
+import cn.qaiu.util.JsExecUtils;
import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.WebClient;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/AESUtils.java b/parser/src/main/java/cn/qaiu/util/AESUtils.java
similarity index 99%
rename from web-service/src/main/java/cn/qaiu/lz/common/util/AESUtils.java
rename to parser/src/main/java/cn/qaiu/util/AESUtils.java
index dcabba2..37d559d 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/util/AESUtils.java
+++ b/parser/src/main/java/cn/qaiu/util/AESUtils.java
@@ -1,4 +1,4 @@
-package cn.qaiu.lz.common.util;
+package cn.qaiu.util;
import org.apache.commons.lang3.StringUtils;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/ArrayUtil.java b/parser/src/main/java/cn/qaiu/util/ArrayUtil.java
similarity index 93%
rename from web-service/src/main/java/cn/qaiu/lz/common/util/ArrayUtil.java
rename to parser/src/main/java/cn/qaiu/util/ArrayUtil.java
index 7973d2f..8d9fe90 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/util/ArrayUtil.java
+++ b/parser/src/main/java/cn/qaiu/util/ArrayUtil.java
@@ -1,4 +1,4 @@
-package cn.qaiu.lz.common.util;
+package cn.qaiu.util;
public class ArrayUtil {
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/CommonUtils.java b/parser/src/main/java/cn/qaiu/util/CommonUtils.java
similarity index 97%
rename from web-service/src/main/java/cn/qaiu/lz/common/util/CommonUtils.java
rename to parser/src/main/java/cn/qaiu/util/CommonUtils.java
index b0f5038..4879b18 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/util/CommonUtils.java
+++ b/parser/src/main/java/cn/qaiu/util/CommonUtils.java
@@ -1,4 +1,4 @@
-package cn.qaiu.lz.common.util;
+package cn.qaiu.util;
import java.net.MalformedURLException;
import java.net.URL;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/JsExecUtils.java b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java
similarity index 98%
rename from web-service/src/main/java/cn/qaiu/lz/common/util/JsExecUtils.java
rename to parser/src/main/java/cn/qaiu/util/JsExecUtils.java
index 51158e3..9683357 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/util/JsExecUtils.java
+++ b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java
@@ -1,4 +1,4 @@
-package cn.qaiu.lz.common.util;
+package cn.qaiu.util;
import org.apache.commons.lang3.StringUtils;
import org.openjdk.nashorn.api.scripting.ScriptObjectMirror;
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/PanExceptionUtils.java b/parser/src/main/java/cn/qaiu/util/PanExceptionUtils.java
similarity index 91%
rename from web-service/src/main/java/cn/qaiu/lz/common/util/PanExceptionUtils.java
rename to parser/src/main/java/cn/qaiu/util/PanExceptionUtils.java
index 7d7e67a..a0bc6af 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/util/PanExceptionUtils.java
+++ b/parser/src/main/java/cn/qaiu/util/PanExceptionUtils.java
@@ -1,4 +1,4 @@
-package cn.qaiu.lz.common.util;
+package cn.qaiu.util;
/**
* @author QAIU
diff --git a/parser/src/main/resources/js/lz.js b/parser/src/main/resources/js/lz.js
new file mode 100644
index 0000000..7df1e7b
--- /dev/null
+++ b/parser/src/main/resources/js/lz.js
@@ -0,0 +1,46 @@
+/**
+ * 蓝奏云解析器js签名获取工具
+ */
+
+var signObj;
+
+
+var $, jQuery;
+
+$ = jQuery = function () {
+ return new jQuery.fn.init();
+}
+
+jQuery.fn = jQuery.prototype = {
+ init: function () {
+ return {
+ focus: function (a) {
+
+ },
+ keyup: function(a) {
+
+ },
+ ajax: function (obj) {
+ signObj = obj
+ }
+
+ }
+ },
+
+}
+
+jQuery.fn.init.prototype = jQuery.fn;
+
+
+// 伪装jquery.ajax函数获取关键数据
+$.ajax = function (obj) {
+ signObj = obj
+}
+
+var document = {
+ getElementById: function (v) {
+ return {
+ value: 'v'
+ }
+ },
+}
diff --git a/parser/src/main/resources/js/ye123.js b/parser/src/main/resources/js/ye123.js
new file mode 100644
index 0000000..65ec609
--- /dev/null
+++ b/parser/src/main/resources/js/ye123.js
@@ -0,0 +1,95 @@
+/*
+https://statics.123pan.com/share-static/dist/umi.fb72555e.js
+eaefamemdead
+eaefameidldy
+_0x4f141a(1690439821|5790548|/b/api/share/download/info|web|3|1946841013) = 秘钥
+
+_0x1e2592 1690439821 时间戳
+_0x48562f 5790548 随机码
+_0x1e37d5 /b/api/share/download/info
+_0x4e2d74 web
+_0x56f040 3
+_0x43bdc6 1946841013 加密时间HASH戳
+
+>>>>
+_0x43bdc6=''['concat'](_0x1e2592, '-')['concat'](_0x48562f, '-')['concat'](_0x406c4e)
+加密时间HASH戳 = 时间戳-随机码-秘钥
+*/
+
+function _0x1b5d95(_0x278d1a) {
+ var _0x839b57,
+ _0x4ed4dc = arguments['length'] > 0x2 && void 0x0 !== arguments[0x2] ? arguments[0x2] : 0x8;
+ if (0x0 === arguments['length'])
+ return null;
+ 'object' === typeof _0x278d1a ? _0x839b57 = _0x278d1a : (0xa === ('' + _0x278d1a)['length'] && (_0x278d1a = 0x3e8 * parseInt(_0x278d1a)),
+ _0x839b57 = new Date(_0x278d1a));
+ var _0xc5c54a = _0x278d1a + 0xea60 * new Date(_0x278d1a)['getTimezoneOffset']()
+ , _0x3732dc = _0xc5c54a + 0x36ee80 * _0x4ed4dc;
+ return _0x839b57 = new Date(_0x3732dc),
+ {
+ 'y': _0x839b57['getFullYear'](),
+ 'm': _0x839b57['getMonth']() + 0x1 < 0xa ? '0' + (_0x839b57['getMonth']() + 0x1) : _0x839b57['getMonth']() + 0x1,
+ 'd': _0x839b57['getDate']() < 0xa ? '0' + _0x839b57['getDate']() : _0x839b57['getDate'](),
+ 'h': _0x839b57['getHours']() < 0xa ? '0' + _0x839b57['getHours']() : _0x839b57['getHours'](),
+ 'f': _0x839b57['getMinutes']() < 0xa ? '0' + _0x839b57['getMinutes']() : _0x839b57['getMinutes']()
+ };
+}
+
+
+function _0x4f141a(_0x4075b1) {
+
+ for (var _0x4eddcb = arguments['length'] > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : 0xa,
+ _0x2fc680 = function() {
+ for (var _0x515c63, _0x361314 = [], _0x4cbdba = 0x0; _0x4cbdba < 0x100; _0x4cbdba++) {
+ _0x515c63 = _0x4cbdba;
+ for (var _0x460960 = 0x0; _0x460960 < 0x8; _0x460960++)
+ _0x515c63 = 0x1 & _0x515c63 ? 0xedb88320 ^ _0x515c63 >>> 0x1 : _0x515c63 >>> 0x1;
+ _0x361314[_0x4cbdba] = _0x515c63;
+ }
+ return _0x361314;
+ },
+ _0x4aed86 = _0x2fc680(),
+ _0x5880f0 = _0x4075b1,
+ _0x492393 = -0x1, _0x25d82c = 0x0;
+ _0x25d82c < _0x5880f0['length'];
+ _0x25d82c++)
+
+ _0x492393 = _0x492393 >>> 0x8 ^ _0x4aed86[0xff & (_0x492393 ^ _0x5880f0.charCodeAt(_0x25d82c))];
+ return _0x492393 = (-0x1 ^ _0x492393) >>> 0x0,
+ _0x492393.toString(_0x4eddcb);
+}
+
+
+function getSign(_0x1e37d5) {
+ var _0x4e2d74 = 'web';
+ var _0x56f040 = 3;
+ var _0x1e2592 = Math.round((new Date().getTime() + 0x3c * new Date().getTimezoneOffset() * 0x3e8 + 28800000) / 0x3e8).toString();
+ var key = 'a,d,e,f,g,h,l,m,y,i,j,n,o,p,k,q,r,s,t,u,b,c,v,w,s,z';
+ var _0x48562f = Math['round'](0x989680 * Math['random']());
+
+ var _0x2f7dfc;
+ var _0x35a889;
+ var _0x36f983;
+ var _0x3b043d;
+ var _0x5bc73b;
+ var _0x4b30b2;
+ var _0x32399e;
+ var _0x25d94e;
+ var _0x373490;
+ for (var _0x1c540f in (_0x2f7dfc = key.split(','),
+ _0x35a889 = _0x1b5d95(_0x1e2592),
+ _0x36f983 = _0x35a889['y'],
+ _0x3b043d = _0x35a889['m'],
+ _0x5bc73b = _0x35a889['d'],
+ _0x4b30b2 = _0x35a889['h'],
+ _0x32399e = _0x35a889['f'],
+ _0x25d94e = [_0x36f983, _0x3b043d, _0x5bc73b, _0x4b30b2, _0x32399e].join(''),
+ _0x373490 = [],
+ _0x25d94e))
+ _0x373490['push'](_0x2f7dfc[Number(_0x25d94e[_0x1c540f])]);
+ var _0x43bdc6;
+ var _0x406c4e;
+ return _0x43bdc6 = _0x4f141a(_0x373490['join']('')),
+ _0x406c4e = _0x4f141a(''['concat'](_0x1e2592, '|')['concat'](_0x48562f, '|')['concat'](_0x1e37d5, '|')['concat'](_0x4e2d74, '|')['concat'](_0x56f040, '|')['concat'](_0x43bdc6)),
+ [_0x43bdc6, ''['concat'](_0x1e2592, '-')['concat'](_0x48562f, '-')['concat'](_0x406c4e)];
+}
diff --git a/web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java b/parser/src/test/java/qaiu/web/test/TestAESUtil.java
similarity index 97%
rename from web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java
rename to parser/src/test/java/qaiu/web/test/TestAESUtil.java
index a01c618..c452c77 100644
--- a/web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java
+++ b/parser/src/test/java/qaiu/web/test/TestAESUtil.java
@@ -1,6 +1,6 @@
-package cn.qaiu.web.test;
+package qaiu.web.test;
-import cn.qaiu.lz.common.util.AESUtils;
+import cn.qaiu.util.AESUtils;
import org.junit.Assert;
import org.junit.Test;
diff --git a/parser/src/test/java/qaiu/web/test/TestRegex.java b/parser/src/test/java/qaiu/web/test/TestRegex.java
new file mode 100644
index 0000000..f6f66bf
--- /dev/null
+++ b/parser/src/test/java/qaiu/web/test/TestRegex.java
@@ -0,0 +1,24 @@
+package qaiu.web.test;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class TestRegex {
+
+ @Test
+ public void regexYFC() {
+ String html = """
+
+
+ """;
+
+ Pattern compile = Pattern.compile("id=\"typed_id\"\\s+value=\"file_(\\d+)\"");
+ Matcher matcher = compile.matcher(html);
+ if (matcher.find()) {
+ System.out.println(matcher.group(0));
+ System.out.println(matcher.group(1));
+ }
+ }
+}
diff --git a/web-service/src/test/java/cn/qaiu/web/test/TestWebClient2.java b/parser/src/test/java/qaiu/web/test/TestWebClient2.java
similarity index 98%
rename from web-service/src/test/java/cn/qaiu/web/test/TestWebClient2.java
rename to parser/src/test/java/qaiu/web/test/TestWebClient2.java
index bfb48ed..f8fcb05 100644
--- a/web-service/src/test/java/cn/qaiu/web/test/TestWebClient2.java
+++ b/parser/src/test/java/qaiu/web/test/TestWebClient2.java
@@ -1,10 +1,9 @@
-package cn.qaiu.web.test;
+package qaiu.web.test;
import io.vertx.core.MultiMap;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.WebClient;
-import org.apache.commons.lang3.RegExUtils;
import org.junit.Test;
import java.util.regex.Matcher;
diff --git a/web-service/src/test/java/cn/qaiu/web/test/WebClientExample.java b/parser/src/test/java/qaiu/web/test/WebClientExample.java
similarity index 98%
rename from web-service/src/test/java/cn/qaiu/web/test/WebClientExample.java
rename to parser/src/test/java/qaiu/web/test/WebClientExample.java
index 0b2384b..5abc716 100644
--- a/web-service/src/test/java/cn/qaiu/web/test/WebClientExample.java
+++ b/parser/src/test/java/qaiu/web/test/WebClientExample.java
@@ -1,4 +1,4 @@
-package cn.qaiu.web.test;
+package qaiu.web.test;
import io.vertx.core.MultiMap;
import io.vertx.core.Vertx;
diff --git a/pom.xml b/pom.xml
index 57a2c93..df1e6e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,20 +7,31 @@
cn.qaiu
netdisk-fast-download
pom
- 0.1.6
+ 0.1.7
core
web-service
core-database
+ parser
+ 17
17
17
UTF-8
${project.basedir}/web-service/target/package
+
+ 2.0.5
+ 4.4.1
+ 0.10.2
+ 1.18.12
+ 2.0.5
+ 3.12.0
+ 2.14.2
+ 1.4.7
@@ -105,14 +116,7 @@
false
-
-
-
- ${project.basedir}/logs
-
- false
-
-
+
diff --git a/web-service/pom.xml b/web-service/pom.xml
index 7f8e6fb..34ae66c 100644
--- a/web-service/pom.xml
+++ b/web-service/pom.xml
@@ -5,19 +5,17 @@
netdisk-fast-download
cn.qaiu
- 0.1.6
+ 0.1.7
4.0.0
- 0.1.6
+ 0.1.7
web-service
${project.basedir}/target/package
17
UTF-8
- 2.0.5
- 6.1.0
- netdisk-fast-download-${project.version}
+ netdisk-fast-download
@@ -36,13 +34,23 @@
ch.qos.logback
logback-classic
- 1.4.6
+ ${logback.version}
org.slf4j
slf4j-api
${slf4j.version}
+
+ cn.qaiu
+ core-database
+ 0.1.7
+
+
+ cn.qaiu
+ parser
+ 0.1.7
+
junit
junit
@@ -52,14 +60,9 @@
io.vertx
vertx-web-client
- 4.4.1
+ ${vertx.version}
-
- cn.qaiu
- core-database
- 0.1.6
-
org.openjdk.nashorn
@@ -105,6 +108,8 @@
*.**
*/*.xml
conf/**
+ js/**
+ http-tools/**
diff --git a/web-service/src/main/java/cn/qaiu/lz/AppMain.java b/web-service/src/main/java/cn/qaiu/lz/AppMain.java
index 65a7adf..29f4952 100644
--- a/web-service/src/main/java/cn/qaiu/lz/AppMain.java
+++ b/web-service/src/main/java/cn/qaiu/lz/AppMain.java
@@ -1,9 +1,13 @@
package cn.qaiu.lz;
+import cn.qaiu.WebClientVertxInit;
import cn.qaiu.db.pool.JDBCPoolInit;
import cn.qaiu.vx.core.Deploy;
import cn.qaiu.vx.core.util.ConfigConstant;
+import cn.qaiu.vx.core.util.VertxHolder;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import io.vertx.core.json.JsonObject;
+import io.vertx.core.json.jackson.DatabindCodec;
/**
@@ -24,6 +28,8 @@ public class AppMain {
* @param jsonObject 配置
*/
private static void exec(JsonObject jsonObject) {
+ WebClientVertxInit.init(VertxHolder.getVertxInstance());
+ DatabindCodec.mapper().registerModule(new JavaTimeModule());
if (jsonObject.getJsonObject(ConfigConstant.SERVER).getBoolean("enableDatabase")) {
JDBCPoolInit.builder().config(jsonObject.getJsonObject("dataSource")).build().initPool();
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/DefaultInterceptor.java b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/DefaultInterceptor.java
index 41627c4..dec3686 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/DefaultInterceptor.java
+++ b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/DefaultInterceptor.java
@@ -16,14 +16,12 @@ import static cn.qaiu.vx.core.util.ConfigConstant.IGNORES_REG;
@HandleSortFilter(1)
public class DefaultInterceptor implements BeforeInterceptor {
-
protected final JsonArray ignores = SharedDataUtil.getJsonArrayForCustomConfig(IGNORES_REG);
@Override
public void handle(RoutingContext ctx) {
- System.out.println("进入前置拦截器->" + ctx.request().path());
-
- ctx.next();
+ System.out.println("进入前置拦截器1->" + ctx.request().path());
+ doNext(ctx);
}
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/LogStatistics.java b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/LogStatistics.java
index 8ec076c..a88a93d 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/LogStatistics.java
+++ b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/LogStatistics.java
@@ -1,26 +1,68 @@
package cn.qaiu.lz.common.interceptorImpl;
+import cn.qaiu.db.pool.JDBCPoolInit;
+import cn.qaiu.lz.common.model.ParserLogInfo;
import cn.qaiu.vx.core.annotaions.HandleSortFilter;
import cn.qaiu.vx.core.interceptor.AfterInterceptor;
+import cn.qaiu.vx.core.model.JsonResult;
+import cn.qaiu.vx.core.util.CommonUtil;
import cn.qaiu.vx.core.util.SharedDataUtil;
-import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
+import io.vertx.ext.web.RoutingContext;
+import io.vertx.jdbcclient.JDBCPool;
+import io.vertx.sqlclient.templates.SqlTemplate;
import lombok.extern.slf4j.Slf4j;
import static cn.qaiu.vx.core.util.ConfigConstant.IGNORES_REG;
+
/**
- *
+ * 记录解析日志
*/
@Slf4j
@HandleSortFilter(99)
public class LogStatistics implements AfterInterceptor {
- protected final JsonArray ignores = SharedDataUtil.getJsonArrayForCustomConfig(IGNORES_REG);
-
+ JDBCPool client = JDBCPoolInit.instance().getPool();
+ private final JsonArray ignores = SharedDataUtil.getJsonArrayForCustomConfig(IGNORES_REG);
@Override
- public void handle(HttpServerRequest request, JsonObject responseData) {
- System.out.println("后置拦截-->" + responseData + " path:" + request.path());
+ public void handle(RoutingContext ctx, JsonObject responseData) {
+
+ // 判断是否忽略
+ if (CommonUtil.matchRegList(ignores.getList(), ctx.request().path())) {
+ return;
+ }
+
+ ParserLogInfo parserLogInfo = new ParserLogInfo();
+ parserLogInfo.setPath(ctx.request().uri());
+ if (responseData == null) {
+ String location = ctx.response().headers().get("location");
+ if (location != null) {
+ parserLogInfo.setCode(200);
+ parserLogInfo.setData(location);
+ } else {
+ log.error("location不存在且responseData为空, path={}", ctx.request().path());
+ }
+ insert(parserLogInfo);
+
+ } else if (responseData.containsKey("code")) {
+ JsonResult> result = JsonResult.toJsonResult(responseData);
+ parserLogInfo.setCode(result.getCode());
+ parserLogInfo.setData(result.getCode() == 500 ? result.getMsg() : result.getData().toString());
+ insert(parserLogInfo);
+ } else {
+ log.error("未知json日志: {}, path: {}", responseData.encode(), ctx.request().path());
+ }
+ }
+
+ void insert(ParserLogInfo info) {
+ SqlTemplate
+ .forUpdate(client, "INSERT INTO t_parser_log_info VALUES (#{id},#{logTime},#{path},#{code},#{data})")
+ .mapFrom(ParserLogInfo.class)
+ .execute(info)
+ .onSuccess(res -> {
+ log.info("inserted log: id={}, path={}, code={}", info.getId(), info.getPath(), info.getCode());
+ }).onFailure(Throwable::printStackTrace);
}
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/model/ParserInfo.java b/web-service/src/main/java/cn/qaiu/lz/common/model/ParserInfo.java
deleted file mode 100644
index 3aab398..0000000
--- a/web-service/src/main/java/cn/qaiu/lz/common/model/ParserInfo.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package cn.qaiu.lz.common.model;
-
-public class ParserInfo {
-
-}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/model/ParserLogInfo.java b/web-service/src/main/java/cn/qaiu/lz/common/model/ParserLogInfo.java
new file mode 100644
index 0000000..2155d26
--- /dev/null
+++ b/web-service/src/main/java/cn/qaiu/lz/common/model/ParserLogInfo.java
@@ -0,0 +1,22 @@
+package cn.qaiu.lz.common.model;
+
+import cn.qaiu.db.ddl.Length;
+import cn.qaiu.db.ddl.Table;
+import cn.qaiu.lz.common.util.SnowflakeIdWorker;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@Table("t_parser_log_info")
+public class ParserLogInfo {
+ String id = SnowflakeIdWorker.getStringId();
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS", timezone = "GMT+8")
+ Date logTime = new Date();
+ String path;
+ Integer code;
+
+ @Length(varcharSize = 4096)
+ String data;
+}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/SnowflakeIdWorker.java b/web-service/src/main/java/cn/qaiu/lz/common/util/SnowflakeIdWorker.java
index 6f4b84a..fafcc4c 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/util/SnowflakeIdWorker.java
+++ b/web-service/src/main/java/cn/qaiu/lz/common/util/SnowflakeIdWorker.java
@@ -96,7 +96,7 @@ public class SnowflakeIdWorker {
*
* @return SnowflakeId
*/
- public synchronized long nextId() {
+ public synchronized Long nextId() {
long timestamp = timeGen();
//如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
@@ -214,6 +214,14 @@ public class SnowflakeIdWorker {
return snowflakeIdWorker;
}
+ synchronized public static Long getLongId() {
+ return snowflakeIdWorker.nextId();
+ }
+
+ synchronized public static String getStringId() {
+ return snowflakeIdWorker.nextId().toString();
+ }
+
synchronized public static SnowflakeIdWorker idWorkerCluster(long workerId, long datacenterId) {
if (snowflakeIdWorkerCluster == null) {
snowflakeIdWorkerCluster = new SnowflakeIdWorker(workerId, datacenterId);
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/http/ParserApi.java b/web-service/src/main/java/cn/qaiu/lz/web/http/ParserApi.java
new file mode 100644
index 0000000..f0cb9ff
--- /dev/null
+++ b/web-service/src/main/java/cn/qaiu/lz/web/http/ParserApi.java
@@ -0,0 +1,32 @@
+package cn.qaiu.lz.web.http;
+
+
+import cn.qaiu.lz.web.model.SysUser;
+import cn.qaiu.lz.web.service.DbService;
+import cn.qaiu.lz.web.service.UserService;
+import cn.qaiu.lz.web.model.StatisticsInfo;
+import cn.qaiu.vx.core.annotaions.RouteHandler;
+import cn.qaiu.vx.core.annotaions.RouteMapping;
+import cn.qaiu.vx.core.enums.RouteMethod;
+import cn.qaiu.vx.core.util.AsyncServiceUtil;
+import io.vertx.core.Future;
+import lombok.extern.slf4j.Slf4j;
+
+@RouteHandler(value = "/v2", order = 10)
+@Slf4j
+public class ParserApi {
+
+ private final UserService userService = AsyncServiceUtil.getAsyncServiceInstance(UserService.class);
+ private final DbService dbService = AsyncServiceUtil.getAsyncServiceInstance(DbService.class);
+
+ @RouteMapping(value = "/login", method = RouteMethod.POST)
+ public Future login(SysUser user) {
+ log.info("<------- login: {}", user.getUsername());
+ return userService.login(user);
+ }
+
+ @RouteMapping(value = "/statisticsInfo", method = RouteMethod.GET, order = 99)
+ public Future statisticsInfo() {
+ return dbService.getStatisticsInfo();
+ }
+}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java b/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java
index a72c52d..9de193d 100644
--- a/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java
+++ b/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java
@@ -1,13 +1,10 @@
package cn.qaiu.lz.web.http;
-import cn.qaiu.lz.common.parser.IPanTool;
-import cn.qaiu.lz.common.parser.impl.EcTool;
-import cn.qaiu.lz.web.model.SysUser;
-import cn.qaiu.lz.web.service.UserService;
+import cn.qaiu.parser.IPanTool;
+import cn.qaiu.parser.impl.EcTool;
import cn.qaiu.vx.core.annotaions.RouteHandler;
import cn.qaiu.vx.core.annotaions.RouteMapping;
import cn.qaiu.vx.core.enums.RouteMethod;
-import cn.qaiu.vx.core.util.AsyncServiceUtil;
import cn.qaiu.vx.core.util.ResponseUtil;
import io.vertx.core.Future;
import io.vertx.core.Promise;
@@ -15,8 +12,6 @@ import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
import lombok.extern.slf4j.Slf4j;
-import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
-
/**
* 服务API
*
Create date 2021/4/28 9:15
@@ -27,14 +22,6 @@ import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
@RouteHandler("/")
public class ServerApi {
- private final UserService userService = AsyncServiceUtil.getAsyncServiceInstance(UserService.class);
-
- @RouteMapping(value = "/login", method = RouteMethod.POST)
- public Future login(SysUser user) {
- log.info("<------- login: {}", user.getUsername());
- return userService.login(user);
- }
-
@RouteMapping(value = "/parser", method = RouteMethod.GET, order = 4)
public Future parse(HttpServerResponse response, HttpServerRequest request, String url, String pwd) {
@@ -43,13 +30,9 @@ public class ServerApi {
// 默认读取Url参数会被截断手动获取一下其他参数
url = EcTool.SHARE_URL_PREFIX + request.getParam("data");
}
- try {
- IPanTool.shareURLPrefixMatching(url, pwd).parse().onSuccess(resUrl -> {
- ResponseUtil.redirect(response, resUrl, promise);
- }).onFailure(t -> promise.fail(t.fillInStackTrace()));
- } catch (Exception e) {
- promise.fail(e);
- }
+ IPanTool.shareURLPrefixMatching(url, pwd).parse().onSuccess(resUrl -> {
+ ResponseUtil.redirect(response, resUrl, promise);
+ }).onFailure(t -> promise.fail(t.fillInStackTrace()));
return promise.future();
}
@@ -64,7 +47,8 @@ public class ServerApi {
@RouteMapping(value = "/:type/:key", method = RouteMethod.GET, order = 1)
- public void parseKey(HttpServerResponse response, String type, String key) {
+ public Future parseKey(HttpServerResponse response, String type, String key) {
+ Promise promise = Promise.promise();
String code = "";
if (key.contains("@")) {
String[] keys = key.split("@");
@@ -72,10 +56,10 @@ public class ServerApi {
code = keys[1];
}
- IPanTool.typeMatching(type, key, code).parse().onSuccess(resUrl -> ResponseUtil.redirect(response, resUrl)).onFailure(t -> {
- response.putHeader(CONTENT_TYPE, "text/html;charset=utf-8");
- response.end(t.getMessage());
- });
+ IPanTool.typeMatching(type, key, code).parse()
+ .onSuccess(resUrl -> ResponseUtil.redirect(response, resUrl, promise))
+ .onFailure(t -> promise.fail(t.fillInStackTrace()));
+ return promise.future();
}
@RouteMapping(value = "/json/:type/:key", method = RouteMethod.GET, order = 2)
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/model/CowUser.java b/web-service/src/main/java/cn/qaiu/lz/web/model/CowUser.java
deleted file mode 100644
index a594aff..0000000
--- a/web-service/src/main/java/cn/qaiu/lz/web/model/CowUser.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package cn.qaiu.lz.web.model;
-
-public class CowUser {
-}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/model/LzUser.java b/web-service/src/main/java/cn/qaiu/lz/web/model/LzUser.java
deleted file mode 100644
index b8205b0..0000000
--- a/web-service/src/main/java/cn/qaiu/lz/web/model/LzUser.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package cn.qaiu.lz.web.model;
-
-public class LzUser {
-}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/model/StatisticsInfo.java b/web-service/src/main/java/cn/qaiu/lz/web/model/StatisticsInfo.java
new file mode 100644
index 0000000..eb198a4
--- /dev/null
+++ b/web-service/src/main/java/cn/qaiu/lz/web/model/StatisticsInfo.java
@@ -0,0 +1,23 @@
+package cn.qaiu.lz.web.model;
+
+import cn.qaiu.lz.common.ToJson;
+import io.vertx.codegen.annotations.DataObject;
+import io.vertx.core.json.JsonObject;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@DataObject
+public class StatisticsInfo implements ToJson {
+ Integer fail;
+ Integer success;
+ Integer total;
+
+
+ public StatisticsInfo(JsonObject jsonObject) {
+ this.fail = jsonObject.getInteger("fail");
+ this.success = jsonObject.getInteger("success");
+ this.total = jsonObject.getInteger("total");
+ }
+}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/model/SysUser.java b/web-service/src/main/java/cn/qaiu/lz/web/model/SysUser.java
index 113d515..7ccfefc 100644
--- a/web-service/src/main/java/cn/qaiu/lz/web/model/SysUser.java
+++ b/web-service/src/main/java/cn/qaiu/lz/web/model/SysUser.java
@@ -4,22 +4,20 @@ import cn.qaiu.db.ddl.Table;
import cn.qaiu.lz.common.ToJson;
import io.vertx.codegen.annotations.DataObject;
import io.vertx.core.json.JsonObject;
-import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
-@NoArgsConstructor
-@AllArgsConstructor
@DataObject
+@NoArgsConstructor
@Table("t_user")
public class SysUser implements ToJson {
private String id;
-
private String username;
private String password;
public SysUser(JsonObject json) {
+ this.id = json.getString("id");
this.username = json.getString("username");
this.password = json.getString("password");
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/service/DbService.java b/web-service/src/main/java/cn/qaiu/lz/web/service/DbService.java
index b514f72..cde3827 100644
--- a/web-service/src/main/java/cn/qaiu/lz/web/service/DbService.java
+++ b/web-service/src/main/java/cn/qaiu/lz/web/service/DbService.java
@@ -1,6 +1,7 @@
package cn.qaiu.lz.web.service;
import cn.qaiu.lz.common.model.UserInfo;
+import cn.qaiu.lz.web.model.StatisticsInfo;
import cn.qaiu.vx.core.base.BaseAsyncService;
import io.vertx.codegen.annotations.ProxyGen;
import io.vertx.core.Future;
@@ -16,4 +17,6 @@ import io.vertx.core.json.JsonObject;
public interface DbService extends BaseAsyncService {
Future sayOk(String data);
Future sayOk2(String data, UserInfo holder);
+
+ Future getStatisticsInfo();
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/service/UserService.java b/web-service/src/main/java/cn/qaiu/lz/web/service/UserService.java
index ae25cf9..b355a25 100644
--- a/web-service/src/main/java/cn/qaiu/lz/web/service/UserService.java
+++ b/web-service/src/main/java/cn/qaiu/lz/web/service/UserService.java
@@ -13,5 +13,5 @@ import io.vertx.core.Future;
*/
@ProxyGen
public interface UserService extends BaseAsyncService {
- Future login(SysUser user);
+ Future login(SysUser user);
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/service/impl/DbServiceImpl.java b/web-service/src/main/java/cn/qaiu/lz/web/service/impl/DbServiceImpl.java
index dfd102a..c2f4f2e 100644
--- a/web-service/src/main/java/cn/qaiu/lz/web/service/impl/DbServiceImpl.java
+++ b/web-service/src/main/java/cn/qaiu/lz/web/service/impl/DbServiceImpl.java
@@ -1,13 +1,20 @@
package cn.qaiu.lz.web.service.impl;
+import cn.qaiu.db.pool.JDBCPoolInit;
import cn.qaiu.lz.common.model.UserInfo;
import cn.qaiu.lz.web.service.DbService;
+import cn.qaiu.lz.web.model.StatisticsInfo;
import cn.qaiu.vx.core.annotaions.Service;
import cn.qaiu.vx.core.model.JsonResult;
import io.vertx.core.Future;
+import io.vertx.core.Promise;
import io.vertx.core.json.JsonObject;
+import io.vertx.jdbcclient.JDBCPool;
+import io.vertx.sqlclient.templates.SqlTemplate;
import lombok.extern.slf4j.Slf4j;
+import java.util.HashMap;
+
/**
* lz-web
*
Create date 2021/7/12 17:26
@@ -35,4 +42,25 @@ public class DbServiceImpl implements DbService {
// log.info("--> {}", holder.toString());
return Future.succeededFuture(JsonObject.mapFrom(JsonResult.data("Hi: " + data)));
}
+
+ @Override
+ public Future getStatisticsInfo() {
+ JDBCPool client = JDBCPoolInit.instance().getPool();
+ Promise promise = Promise.promise();
+ String sql = """
+ select COUNT(CASE "code" WHEN 500 THEN "code" END ) "fail",
+ COUNT(CASE "code" WHEN 200 THEN "code" END ) "success",
+ count(1) "total"
+ from "t_parser_log_info"
+ """;
+ SqlTemplate.forQuery(client, sql).mapTo(StatisticsInfo.class).execute(new HashMap<>()).onSuccess(row -> {
+ StatisticsInfo info;
+ if ((info = row.iterator().next()) != null) {
+ promise.complete(info);
+ } else {
+ promise.fail("t_parser_log_info查询为空");
+ }
+ }).onFailure(promise::fail);
+ return promise.future();
+ }
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/web/service/impl/UserServiceImpl.java b/web-service/src/main/java/cn/qaiu/lz/web/service/impl/UserServiceImpl.java
index 1841eed..45de354 100644
--- a/web-service/src/main/java/cn/qaiu/lz/web/service/impl/UserServiceImpl.java
+++ b/web-service/src/main/java/cn/qaiu/lz/web/service/impl/UserServiceImpl.java
@@ -17,13 +17,13 @@ import java.util.concurrent.TimeUnit;
public class UserServiceImpl implements UserService {
@Override
- public Future login(SysUser user) {
+ public Future login(SysUser user) {
try {
- TimeUnit.SECONDS.sleep(6);
+ TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
- return Future.succeededFuture("111");
+ return Future.succeededFuture(user);
}
}
diff --git a/web-service/src/main/resources/app-dev.yml b/web-service/src/main/resources/app-dev.yml
index a232568..4cdf968 100644
--- a/web-service/src/main/resources/app-dev.yml
+++ b/web-service/src/main/resources/app-dev.yml
@@ -5,7 +5,7 @@ server:
# 使用静态页面
enableStaticHtmlService: false
# 使用数据库
- enableDatabase: false
+ enableDatabase: true
staticResourcePath: webroot/
# 反向代理服务器配置路径(不用加后缀)
proxyConf: server-proxy
@@ -22,11 +22,9 @@ custom:
baseLocations: cn.qaiu.lz
# 路由处理默认超时时间(毫秒)
routeTimeOut: 15000
- # 拦截器包路径
- interceptorClassPath: cn.qaiu.lz.common.interceptorImpl.DefaultInterceptor
# 拦截器匹配规则
ignoresReg:
- - .*/login$
+ - /v2/statisticsInfo
- .*/test.*$
# 参数注入的实体类包路径匹配正则 (防止同名类引发歧义)
@@ -37,11 +35,7 @@ custom:
# 数据源配置
dataSource:
provider_class: io.vertx.ext.jdbc.spi.impl.HikariCPDataSourceProvider
- jdbcUrl: jdbc:h2:tcp://127.0.0.1:9095/./db/myData;MODE=MySQL;DATABASE_TO_LOWER=FALSE
+ jdbcUrl: jdbc:h2:tcp://127.0.0.1:9095/./db/myData;MODE=MySQL;DATABASE_TO_UPPER=FALSE
driverClassName: org.h2.Driver
username: root
password: '123456'
- tableClassPath: cn.qaiu.lz.web.model
-
-cowConfig:
- config: '111'
diff --git a/web-service/src/main/resources/app.yml b/web-service/src/main/resources/app.yml
index b003617..f128143 100644
--- a/web-service/src/main/resources/app.yml
+++ b/web-service/src/main/resources/app.yml
@@ -1,6 +1,6 @@
# 要激活的配置: dev--连接本地数据库; prod连接线上数据库
active: dev
# 版本号
-version_app: 0.1.6
+version_app: 0.1.7
# 公司名称 -> LOGO版权文字
copyright: QAIU
diff --git a/web-service/src/main/resources/http-tools/test.http b/web-service/src/main/resources/http-tools/test.http
index c2ddd74..9167792 100644
--- a/web-service/src/main/resources/http-tools/test.http
+++ b/web-service/src/main/resources/http-tools/test.http
@@ -98,6 +98,8 @@ GET http://127.0.0.1:6400/ye/iaKtVv-qOECd
GET http://127.0.0.1:6400/parser?url=https://www.123pan.com/s/iaKtVv-6OECd.html&pwd=DcGe
###
-POST http://127.0.0.1:6400/login
+GET http://127.0.0.1:6400/v2/statisticsInfo
+###
+POST http://127.0.0.1:6400/v2/login?username=asd
diff --git a/web-service/src/test/java/cn/qaiu/vx/core/util/ParamUtilTest.java b/web-service/src/test/java/cn/qaiu/vx/core/util/ParamUtilTest.java
new file mode 100644
index 0000000..eedae1a
--- /dev/null
+++ b/web-service/src/test/java/cn/qaiu/vx/core/util/ParamUtilTest.java
@@ -0,0 +1,15 @@
+package cn.qaiu.vx.core.util;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ParamUtilTest {
+
+ @Test
+ public void paramsToMap() {
+ System.out.println(ParamUtil.paramsToMap(""));
+ System.out.println(ParamUtil.paramsToMap("a=asd&d=23"));
+ System.out.println(ParamUtil.paramsToMap("asdasd&dd"));
+ }
+}
diff --git a/web-service/src/test/java/cn/qaiu/web/test/Test02.java b/web-service/src/test/java/cn/qaiu/web/test/Test02.java
index c5f8ec9..39b1edd 100644
--- a/web-service/src/test/java/cn/qaiu/web/test/Test02.java
+++ b/web-service/src/test/java/cn/qaiu/web/test/Test02.java
@@ -10,6 +10,7 @@ import javassist.bytecode.LocalVariableAttribute;
import javassist.bytecode.MethodInfo;
import org.junit.Test;
+import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -82,4 +83,14 @@ public class Test02 {
System.out.println(map);
}
+
+
+ @Test
+ public void test4() {
+ LocalDateTime parse = LocalDateTime.parse((String) "2022-01-01T11:22:00");
+ System.out.println(parse);
+
+ }
+
+
}