From 670638055803b565c29c9f4a84488a2fb84c11d4 Mon Sep 17 00:00:00 2001
From: QAIU <736226400@qq.com>
Date: Wed, 23 Aug 2023 14:55:08 +0800
Subject: [PATCH] =?UTF-8?q?=E8=93=9D=E5=A5=8F=E4=BA=91=E8=A7=84=E5=88=99?=
=?UTF-8?q?=E5=BE=AE=E8=B0=83,=20=E6=A1=86=E6=9E=B6=E4=BC=98=E5=8C=96(70%)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/cn/qaiu/vx/core/Deploy.java | 4 +-
.../vx/core/annotaions/HandleSortFilter.java | 15 +++++
.../cn/qaiu/vx/core/base/BaseHttpApi.java | 28 +++++++-
.../handlerfactory/RouterHandlerFactory.java | 67 ++++++++++++-------
.../vx/core/interceptor/AfterInterceptor.java | 15 +++++
...nterceptor.java => BeforeInterceptor.java} | 10 ++-
.../java/cn/qaiu/vx/core/util/CommonUtil.java | 38 ++++++++++-
.../cn/qaiu/vx/core/util/ResponseUtil.java | 17 +++++
pom.xml | 1 +
.../interceptorImpl/DefaultInterceptor.java | 19 +++---
.../common/interceptorImpl/LogStatistics.java | 26 +++++++
.../cn/qaiu/lz/common/parser/IPanTool.java | 1 +
.../cn/qaiu/lz/common/parser/impl/LzTool.java | 2 +-
.../cn/qaiu/lz/common/parser/impl/QkTool.java | 12 +++-
.../java/cn/qaiu/lz/web/http/ServerApi.java | 7 +-
.../java/cn/qaiu/web/test/TestAESUtil.java | 6 ++
16 files changed, 212 insertions(+), 56 deletions(-)
create mode 100644 core/src/main/java/cn/qaiu/vx/core/annotaions/HandleSortFilter.java
create mode 100644 core/src/main/java/cn/qaiu/vx/core/interceptor/AfterInterceptor.java
rename core/src/main/java/cn/qaiu/vx/core/interceptor/{Interceptor.java => BeforeInterceptor.java} (51%)
create mode 100644 core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
create mode 100644 web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/LogStatistics.java
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 7cac9c8..53a15d6 100644
--- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java
+++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java
@@ -82,7 +82,7 @@ public final class Deploy {
var calendar = Calendar.getInstance();
calendar.setTime(new Date());
var year = calendar.get(Calendar.YEAR);
- var logoTemplete = """
+ var logoTemplate = """
Web Server powered by:\s
____ ____ _ _ _ \s
@@ -95,7 +95,7 @@ public final class Deploy {
""";
- System.out.printf(logoTemplete,
+ System.out.printf(logoTemplate,
conf.getString("version_app"),
VersionCommand.getVersion(),
conf.getString("copyright"),
diff --git a/core/src/main/java/cn/qaiu/vx/core/annotaions/HandleSortFilter.java b/core/src/main/java/cn/qaiu/vx/core/annotaions/HandleSortFilter.java
new file mode 100644
index 0000000..1457498
--- /dev/null
+++ b/core/src/main/java/cn/qaiu/vx/core/annotaions/HandleSortFilter.java
@@ -0,0 +1,15 @@
+package cn.qaiu.vx.core.annotaions;
+
+import java.lang.annotation.*;
+
+@Documented
+@Inherited
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface HandleSortFilter {
+ /**
+ * 注册顺序,数字越大越先注册
+ * 值<0时会过滤掉该处理器
+ */
+ int value() default 0;
+}
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 6de5ad0..f9a5ca2 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,8 +1,11 @@
package cn.qaiu.vx.core.base;
+import cn.qaiu.vx.core.interceptor.AfterInterceptor;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.RoutingContext;
+import java.util.Set;
+
import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
/**
@@ -13,6 +16,10 @@ import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
*/
public interface BaseHttpApi {
+ default Set getAfterInterceptor() {
+ return null;
+ }
+
default void fireJsonResponse(RoutingContext ctx, JsonObject jsonResult) {
ctx.response().putHeader(CONTENT_TYPE, "application/json; charset=utf-8")
.setStatusCode(200)
@@ -21,11 +28,28 @@ public interface BaseHttpApi {
default void fireJsonResponse(RoutingContext ctx, T jsonResult) {
JsonObject jsonObject = JsonObject.mapFrom(jsonResult);
- fireJsonResponse(ctx, jsonObject);
+ if (!ctx.response().ended()) {
+ fireJsonResponse(ctx, jsonObject);
+ }
+ handleAfterInterceptor(ctx, jsonObject);
+ }
+
+ default void handleAfterInterceptor(RoutingContext ctx, JsonObject jsonObject){
+ Set afterInterceptor = getAfterInterceptor();
+ if (afterInterceptor != null) {
+ afterInterceptor.forEach(ai -> ai.handle(ctx.request(), jsonObject));
+ }
+ if (!ctx.response().ended()) {
+ fireJsonResponse(ctx, "handleAfterInterceptor end.");
+ }
}
default void fireTextResponse(RoutingContext ctx, String text) {
- ctx.response().putHeader("content-type", "text/html; charset=utf-8").end(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) {
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 27e1cbc..dab1951 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,12 +1,9 @@
package cn.qaiu.vx.core.handlerfactory;
-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.annotaions.*;
import cn.qaiu.vx.core.base.BaseHttpApi;
-import cn.qaiu.vx.core.enums.MIMEType;
-import cn.qaiu.vx.core.interceptor.Interceptor;
+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.vertx.core.Future;
@@ -75,21 +72,22 @@ public class RouterHandlerFactory implements BaseHttpApi {
* 开始扫描并注册handler
*/
public Router createRouter() {
- Router router = Router.router(VertxHolder.getVertxInstance());
+ // 主路由
+ Router mainRouter = Router.router(VertxHolder.getVertxInstance());
// 静态资源
String path = SharedDataUtil.getJsonConfig("server")
.getString("staticResourcePath");
if (!StringUtils.isEmpty(path)) {
// 静态资源
- router.route("/*").handler(StaticHandler
+ mainRouter.route("/*").handler(StaticHandler
.create(path)
.setCachingEnabled(true)
.setDefaultContentEncoding("UTF-8"));
}
- router.route().handler(ctx -> {
+ mainRouter.route().handler(ctx -> {
LOGGER.debug("The HTTP service request address information ===>path:{}, uri:{}, method:{}",
ctx.request().path(), ctx.request().absoluteURI(), ctx.request().method());
ctx.response().headers().add(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
@@ -100,11 +98,15 @@ public class RouterHandlerFactory implements BaseHttpApi {
ctx.next();
});
// 添加跨域的方法
- router.route().handler(CorsHandler.create().addRelativeOrigin(".*").allowCredentials(true).allowedMethods(httpMethods));
+ mainRouter.route().handler(CorsHandler.create().addRelativeOrigin(".*").allowCredentials(true).allowedMethods(httpMethods));
// 配置文件上传路径
- router.route().handler(BodyHandler.create().setUploadsDirectory("uploads"));
+ mainRouter.route().handler(BodyHandler.create().setUploadsDirectory("uploads"));
+ // 拦截器
+ Set> interceptorSet = getInterceptorSet();
+ Route route0 = mainRouter.route("/*");
+ interceptorSet.forEach(route0::handler);
try {
Set> handlers = reflections.getTypesAnnotatedWith(RouteHandler.class);
@@ -118,7 +120,7 @@ public class RouterHandlerFactory implements BaseHttpApi {
for (Class> handler : sortedHandlers) {
try {
// 注册请求处理方法
- registerNewHandler(router, handler);
+ registerNewHandler(mainRouter, handler);
} catch (Throwable e) {
LOGGER.error("Error register {}, Error details:", handler, e.getCause());
@@ -128,12 +130,12 @@ public class RouterHandlerFactory implements BaseHttpApi {
LOGGER.error("Manually Register Handler Fail, Error details:" + e.getMessage());
}
// 错误请求处理
- router.errorHandler(405, ctx -> fireJsonResponse(ctx, JsonResult
+ mainRouter.errorHandler(405, ctx -> fireJsonResponse(ctx, JsonResult
.error("Method Not Allowed", 405)));
- router.errorHandler(404, ctx -> ctx.response().setStatusCode(404).setChunked(true)
+ mainRouter.errorHandler(404, ctx -> ctx.response().setStatusCode(404).setChunked(true)
.end("Internal server error: 404 not found"));
- return router;
+ return mainRouter;
}
/**
@@ -157,8 +159,6 @@ public class RouterHandlerFactory implements BaseHttpApi {
method -> method.isAnnotationPresent(SockRouteMapper.class)
).toList());
- // 拦截器
- Handler interceptor = getInterceptor();
// 依次注册处理方法
for (Method method : methodList) {
if (method.isAnnotationPresent(RouteMapping.class)) {
@@ -177,8 +177,6 @@ public class RouterHandlerFactory implements BaseHttpApi {
// 设置默认超时
route.handler(TimeoutHandler.create(SharedDataUtil.getCustomConfig().getInteger(ROUTE_TIME_OUT)));
- // 先执行拦截方法, 再进入业务请求
- route.handler(interceptor);
route.handler(ctx -> handlerMethod(instance, method, ctx)).failureHandler(ctx -> {
if (ctx.response().ended()) return;
ctx.failure().printStackTrace();
@@ -235,11 +233,9 @@ public class RouterHandlerFactory implements BaseHttpApi {
* @return Handler
* @throws Throwable Throwable
*/
- private Handler getInterceptor() throws Throwable {
+ private Set> getInterceptorSet() {
// 配置拦截
- Class> interceptorClass = Class.forName(SharedDataUtil.getValueForCustomConfig("interceptorClassPath"));
- Interceptor handleInstance = (Interceptor)ReflectionUtil.newWithNoParam(interceptorClass);
- return handleInstance.doHandle();
+ return getBeforeInterceptor().stream().map(BeforeInterceptor::doHandle).collect(Collectors.toSet());
}
/**
@@ -369,11 +365,13 @@ public class RouterHandlerFactory implements BaseHttpApi {
fireJsonResponse(ctx, res);
} else if (res != null) {
fireJsonResponse(ctx, JsonResult.data(res));
+ } else {
+ handleAfterInterceptor(ctx, null);
}
+
}).onFailure(e -> fireJsonResponse(ctx, JsonResult.error(e.getMessage())));
} else {
- ctx.response().headers().set(CONTENT_TYPE, MIMEType.TEXT_HTML.getValue());
- ctx.end(data.toString());
+ fireTextResponse(ctx, data.toString());
}
}
} catch (Throwable e) {
@@ -404,4 +402,23 @@ 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);
+ if (interceptorClassSet == null) {
+ return new HashSet<>();
+ }
+ return CommonUtil.sortClassSet(interceptorClassSet);
+ }
}
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
new file mode 100644
index 0000000..b479663
--- /dev/null
+++ b/core/src/main/java/cn/qaiu/vx/core/interceptor/AfterInterceptor.java
@@ -0,0 +1,15 @@
+package cn.qaiu.vx.core.interceptor;
+
+import io.vertx.core.http.HttpServerRequest;
+import io.vertx.core.json.JsonObject;
+
+/**
+ * 后置拦截器接口
+ *
+ * @author QAIU
+ */
+public interface AfterInterceptor {
+
+ void handle(HttpServerRequest request, JsonObject responseData);
+
+}
diff --git a/core/src/main/java/cn/qaiu/vx/core/interceptor/Interceptor.java b/core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java
similarity index 51%
rename from core/src/main/java/cn/qaiu/vx/core/interceptor/Interceptor.java
rename to core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java
index 4f8d563..c5470e7 100644
--- a/core/src/main/java/cn/qaiu/vx/core/interceptor/Interceptor.java
+++ b/core/src/main/java/cn/qaiu/vx/core/interceptor/BeforeInterceptor.java
@@ -4,18 +4,16 @@ import io.vertx.core.Handler;
import io.vertx.ext.web.RoutingContext;
/**
- * 拦截器接口
- *
Create date 2021-05-06 09:20:37
+ * 前置拦截器接口
*
* @author QAIU
*/
-public interface Interceptor {
+public interface BeforeInterceptor {
default Handler doHandle() {
- return this::beforeHandle;
+ return this::handle;
}
- void beforeHandle(RoutingContext context);
+ void handle(RoutingContext context);
- void afterHandle(RoutingContext context);
}
diff --git a/core/src/main/java/cn/qaiu/vx/core/util/CommonUtil.java b/core/src/main/java/cn/qaiu/vx/core/util/CommonUtil.java
index 23bae56..a9142a2 100644
--- a/core/src/main/java/cn/qaiu/vx/core/util/CommonUtil.java
+++ b/core/src/main/java/cn/qaiu/vx/core/util/CommonUtil.java
@@ -1,5 +1,6 @@
package cn.qaiu.vx.core.util;
+import cn.qaiu.vx.core.annotaions.HandleSortFilter;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import org.apache.commons.beanutils.ConvertUtils;
@@ -15,6 +16,8 @@ import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* CommonUtil
@@ -70,10 +73,11 @@ public class CommonUtil {
} catch (UnknownHostException e) {
return false;
}
- try(Socket ignored = new Socket(Address, port)) {
- //建立一个Socket连接
+ try (Socket ignored = new Socket(Address, port)) {
+ //建立一个Socket连接
flag = true;
- } catch (IOException ignoredException) {}
+ } catch (IOException ignoredException) {
+ }
return flag;
}
@@ -126,4 +130,32 @@ public class CommonUtil {
LocalConstant.put(configName, map);
LOGGER.info("读取配置{}成功", configName);
}
+
+ public static Set sortClassSet(Set> set) {
+ return set.stream().filter(c1 -> {
+ HandleSortFilter s1 = c1.getAnnotation(HandleSortFilter.class);
+ if (s1 != null) {
+ return s1.value() > 0;
+ } else {
+ return true;
+ }
+ }).sorted((c1, c2) -> {
+ HandleSortFilter s1 = c1.getAnnotation(HandleSortFilter.class);
+ HandleSortFilter s2 = c2.getAnnotation(HandleSortFilter.class);
+ int n1 = 0, n2 = 0;
+ if (s1 != null) {
+ n1 = s1.value();
+ }
+ if (s2 != null) {
+ n2 = s2.value();
+ }
+ return n1 - n2;
+ }).map(c -> {
+ try {
+ return ReflectionUtil.newWithNoParam(c);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }).collect(Collectors.toSet());
+ }
}
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
new file mode 100644
index 0000000..538f34f
--- /dev/null
+++ b/core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
@@ -0,0 +1,17 @@
+package cn.qaiu.vx.core.util;
+
+import io.vertx.core.Promise;
+import io.vertx.core.http.HttpHeaders;
+import io.vertx.core.http.HttpServerResponse;
+
+public class ResponseUtil {
+
+ public static void redirect(HttpServerResponse response, String url) {
+ response.putHeader(HttpHeaders.LOCATION, url).setStatusCode(302).end();
+ }
+
+ public static void redirect(HttpServerResponse response, String url, Promise> promise) {
+ redirect(response, url);
+ promise.complete();
+ }
+}
diff --git a/pom.xml b/pom.xml
index ad2e712..57a2c93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,7 @@
17
17
UTF-8
+
${project.basedir}/web-service/target/package
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 cdc0a21..41627c4 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
@@ -1,7 +1,7 @@
package cn.qaiu.lz.common.interceptorImpl;
-import cn.qaiu.vx.core.base.BaseHttpApi;
-import cn.qaiu.vx.core.interceptor.Interceptor;
+import cn.qaiu.vx.core.annotaions.HandleSortFilter;
+import cn.qaiu.vx.core.interceptor.BeforeInterceptor;
import cn.qaiu.vx.core.util.SharedDataUtil;
import io.vertx.core.json.JsonArray;
import io.vertx.ext.web.RoutingContext;
@@ -10,23 +10,20 @@ import lombok.extern.slf4j.Slf4j;
import static cn.qaiu.vx.core.util.ConfigConstant.IGNORES_REG;
/**
- * 默认拦截器实现
- * 校验用户是否合法
- * TODO 暂时只做简单实现
+ * 前置拦截器实现
*/
@Slf4j
-public class DefaultInterceptor implements Interceptor, BaseHttpApi {
+@HandleSortFilter(1)
+public class DefaultInterceptor implements BeforeInterceptor {
protected final JsonArray ignores = SharedDataUtil.getJsonArrayForCustomConfig(IGNORES_REG);
@Override
- public void beforeHandle(RoutingContext ctx) {
+ public void handle(RoutingContext ctx) {
+ System.out.println("进入前置拦截器->" + ctx.request().path());
+
ctx.next();
}
- @Override
- public void afterHandle(RoutingContext 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
new file mode 100644
index 0000000..8ec076c
--- /dev/null
+++ b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/LogStatistics.java
@@ -0,0 +1,26 @@
+package cn.qaiu.lz.common.interceptorImpl;
+
+import cn.qaiu.vx.core.annotaions.HandleSortFilter;
+import cn.qaiu.vx.core.interceptor.AfterInterceptor;
+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 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);
+
+ @Override
+ public void handle(HttpServerRequest request, JsonObject responseData) {
+ System.out.println("后置拦截-->" + responseData + " path:" + request.path());
+ }
+}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java
index 3361b05..e0c081f 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java
+++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/IPanTool.java
@@ -15,6 +15,7 @@ public interface IPanTool {
case "uc" -> new UcTool(key, pwd);
case "ye" -> new YeTool(key, pwd);
case "fj" -> new FjTool(key, pwd);
+ case "qk" -> new QkTool(key, pwd);
default -> {
throw new UnsupportedOperationException("未知分享类型");
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java
index b52f0e4..0e69ebc 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java
+++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java
@@ -90,7 +90,7 @@ public class LzTool extends PanBase implements IPanTool {
private String getJsText(String html) {
String jsTagStart = "";
- int index = html.indexOf(jsTagStart);
+ int index = html.lastIndexOf(jsTagStart);
if (index == -1) {
return null;
}
diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java
index bb6dd59..7df7550 100644
--- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java
+++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/QkTool.java
@@ -1,12 +1,20 @@
package cn.qaiu.lz.common.parser.impl;
+import cn.qaiu.lz.common.parser.IPanTool;
+import cn.qaiu.lz.common.parser.PanBase;
import io.vertx.core.Future;
import io.vertx.core.Promise;
-public class QkTool {
- public static Future parse() {
+public class QkTool extends PanBase implements IPanTool {
+
+ public QkTool(String key, String pwd) {
+ super(key, pwd);
+ }
+
+ public Future parse() {
Promise promise = Promise.promise();
+ promise.complete("https://lz.qaiu.top");
return promise.future();
}
}
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 d65f503..a72c52d 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
@@ -8,6 +8,7 @@ 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;
import io.vertx.core.http.HttpServerRequest;
@@ -44,8 +45,7 @@ public class ServerApi {
}
try {
IPanTool.shareURLPrefixMatching(url, pwd).parse().onSuccess(resUrl -> {
- response.putHeader("location", resUrl).setStatusCode(302).end();
- promise.complete();
+ ResponseUtil.redirect(response, resUrl, promise);
}).onFailure(t -> promise.fail(t.fillInStackTrace()));
} catch (Exception e) {
promise.fail(e);
@@ -72,8 +72,7 @@ public class ServerApi {
code = keys[1];
}
- IPanTool.typeMatching(type, key, code).parse().onSuccess(resUrl -> response.putHeader("location", resUrl)
- .setStatusCode(302).end()).onFailure(t -> {
+ 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());
});
diff --git a/web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java b/web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java
index 1a46244..a01c618 100644
--- a/web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java
+++ b/web-service/src/test/java/cn/qaiu/web/test/TestAESUtil.java
@@ -50,6 +50,12 @@ public class TestAESUtil {
Assert.assertEquals(146731, AESUtils.idEncrypt("7jy0zlv"));
}
+ @Test
+ public void test00() throws IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException,
+ NoSuchAlgorithmException, InvalidKeyException {
+ System.out.println(AESUtils.decryptByBase64AES(AESUtils.CIPHER_AES2, AESUtils.CIPHER_AES));
+ }
+
@Test
public void testTs() {
System.out.println(System.currentTimeMillis());