mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2025-12-16 04:13:03 +00:00
蓝奏云规则微调, 框架优化(70%)
This commit is contained in:
@@ -82,7 +82,7 @@ public final class Deploy {
|
|||||||
var calendar = Calendar.getInstance();
|
var calendar = Calendar.getInstance();
|
||||||
calendar.setTime(new Date());
|
calendar.setTime(new Date());
|
||||||
var year = calendar.get(Calendar.YEAR);
|
var year = calendar.get(Calendar.YEAR);
|
||||||
var logoTemplete = """
|
var logoTemplate = """
|
||||||
|
|
||||||
Web Server powered by:\s
|
Web Server powered by:\s
|
||||||
____ ____ _ _ _ \s
|
____ ____ _ _ _ \s
|
||||||
@@ -95,7 +95,7 @@ public final class Deploy {
|
|||||||
|
|
||||||
""";
|
""";
|
||||||
|
|
||||||
System.out.printf(logoTemplete,
|
System.out.printf(logoTemplate,
|
||||||
conf.getString("version_app"),
|
conf.getString("version_app"),
|
||||||
VersionCommand.getVersion(),
|
VersionCommand.getVersion(),
|
||||||
conf.getString("copyright"),
|
conf.getString("copyright"),
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
/**
|
||||||
|
* 注册顺序,数字越大越先注册<br>
|
||||||
|
* 值<0时会过滤掉该处理器
|
||||||
|
*/
|
||||||
|
int value() default 0;
|
||||||
|
}
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
package cn.qaiu.vx.core.base;
|
package cn.qaiu.vx.core.base;
|
||||||
|
|
||||||
|
import cn.qaiu.vx.core.interceptor.AfterInterceptor;
|
||||||
import io.vertx.core.json.JsonObject;
|
import io.vertx.core.json.JsonObject;
|
||||||
import io.vertx.ext.web.RoutingContext;
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
|
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 {
|
public interface BaseHttpApi {
|
||||||
|
|
||||||
|
default Set<AfterInterceptor> getAfterInterceptor() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
default void fireJsonResponse(RoutingContext ctx, JsonObject jsonResult) {
|
default void fireJsonResponse(RoutingContext ctx, JsonObject jsonResult) {
|
||||||
ctx.response().putHeader(CONTENT_TYPE, "application/json; charset=utf-8")
|
ctx.response().putHeader(CONTENT_TYPE, "application/json; charset=utf-8")
|
||||||
.setStatusCode(200)
|
.setStatusCode(200)
|
||||||
@@ -21,11 +28,28 @@ public interface BaseHttpApi {
|
|||||||
|
|
||||||
default <T> void fireJsonResponse(RoutingContext ctx, T jsonResult) {
|
default <T> void fireJsonResponse(RoutingContext ctx, T jsonResult) {
|
||||||
JsonObject jsonObject = JsonObject.mapFrom(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> 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) {
|
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> afterInterceptor = getAfterInterceptor();
|
||||||
|
if (afterInterceptor != null) {
|
||||||
|
afterInterceptor.forEach(ai -> ai.handle(ctx.request(), new JsonObject().put("text", text)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default void sendError(int statusCode, RoutingContext ctx) {
|
default void sendError(int statusCode, RoutingContext ctx) {
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
package cn.qaiu.vx.core.handlerfactory;
|
package cn.qaiu.vx.core.handlerfactory;
|
||||||
|
|
||||||
import cn.qaiu.vx.core.annotaions.DateFormat;
|
import cn.qaiu.vx.core.annotaions.*;
|
||||||
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.base.BaseHttpApi;
|
||||||
import cn.qaiu.vx.core.enums.MIMEType;
|
import cn.qaiu.vx.core.interceptor.AfterInterceptor;
|
||||||
import cn.qaiu.vx.core.interceptor.Interceptor;
|
import cn.qaiu.vx.core.interceptor.BeforeInterceptor;
|
||||||
import cn.qaiu.vx.core.model.JsonResult;
|
import cn.qaiu.vx.core.model.JsonResult;
|
||||||
import cn.qaiu.vx.core.util.*;
|
import cn.qaiu.vx.core.util.*;
|
||||||
import io.vertx.core.Future;
|
import io.vertx.core.Future;
|
||||||
@@ -75,21 +72,22 @@ public class RouterHandlerFactory implements BaseHttpApi {
|
|||||||
* 开始扫描并注册handler
|
* 开始扫描并注册handler
|
||||||
*/
|
*/
|
||||||
public Router createRouter() {
|
public Router createRouter() {
|
||||||
Router router = Router.router(VertxHolder.getVertxInstance());
|
// 主路由
|
||||||
|
Router mainRouter = Router.router(VertxHolder.getVertxInstance());
|
||||||
|
|
||||||
// 静态资源
|
// 静态资源
|
||||||
String path = SharedDataUtil.getJsonConfig("server")
|
String path = SharedDataUtil.getJsonConfig("server")
|
||||||
.getString("staticResourcePath");
|
.getString("staticResourcePath");
|
||||||
if (!StringUtils.isEmpty(path)) {
|
if (!StringUtils.isEmpty(path)) {
|
||||||
// 静态资源
|
// 静态资源
|
||||||
router.route("/*").handler(StaticHandler
|
mainRouter.route("/*").handler(StaticHandler
|
||||||
.create(path)
|
.create(path)
|
||||||
.setCachingEnabled(true)
|
.setCachingEnabled(true)
|
||||||
.setDefaultContentEncoding("UTF-8"));
|
.setDefaultContentEncoding("UTF-8"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
router.route().handler(ctx -> {
|
mainRouter.route().handler(ctx -> {
|
||||||
LOGGER.debug("The HTTP service request address information ===>path:{}, uri:{}, method:{}",
|
LOGGER.debug("The HTTP service request address information ===>path:{}, uri:{}, method:{}",
|
||||||
ctx.request().path(), ctx.request().absoluteURI(), ctx.request().method());
|
ctx.request().path(), ctx.request().absoluteURI(), ctx.request().method());
|
||||||
ctx.response().headers().add(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
|
ctx.response().headers().add(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
|
||||||
@@ -100,11 +98,15 @@ public class RouterHandlerFactory implements BaseHttpApi {
|
|||||||
ctx.next();
|
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<Handler<RoutingContext>> interceptorSet = getInterceptorSet();
|
||||||
|
Route route0 = mainRouter.route("/*");
|
||||||
|
interceptorSet.forEach(route0::handler);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Set<Class<?>> handlers = reflections.getTypesAnnotatedWith(RouteHandler.class);
|
Set<Class<?>> handlers = reflections.getTypesAnnotatedWith(RouteHandler.class);
|
||||||
@@ -118,7 +120,7 @@ public class RouterHandlerFactory implements BaseHttpApi {
|
|||||||
for (Class<?> handler : sortedHandlers) {
|
for (Class<?> handler : sortedHandlers) {
|
||||||
try {
|
try {
|
||||||
// 注册请求处理方法
|
// 注册请求处理方法
|
||||||
registerNewHandler(router, handler);
|
registerNewHandler(mainRouter, handler);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOGGER.error("Error register {}, Error details:", handler, e.getCause());
|
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());
|
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)));
|
.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"));
|
.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)
|
method -> method.isAnnotationPresent(SockRouteMapper.class)
|
||||||
).toList());
|
).toList());
|
||||||
|
|
||||||
// 拦截器
|
|
||||||
Handler<RoutingContext> interceptor = getInterceptor();
|
|
||||||
// 依次注册处理方法
|
// 依次注册处理方法
|
||||||
for (Method method : methodList) {
|
for (Method method : methodList) {
|
||||||
if (method.isAnnotationPresent(RouteMapping.class)) {
|
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(TimeoutHandler.create(SharedDataUtil.getCustomConfig().getInteger(ROUTE_TIME_OUT)));
|
||||||
// 先执行拦截方法, 再进入业务请求
|
|
||||||
route.handler(interceptor);
|
|
||||||
route.handler(ctx -> handlerMethod(instance, method, ctx)).failureHandler(ctx -> {
|
route.handler(ctx -> handlerMethod(instance, method, ctx)).failureHandler(ctx -> {
|
||||||
if (ctx.response().ended()) return;
|
if (ctx.response().ended()) return;
|
||||||
ctx.failure().printStackTrace();
|
ctx.failure().printStackTrace();
|
||||||
@@ -235,11 +233,9 @@ public class RouterHandlerFactory implements BaseHttpApi {
|
|||||||
* @return Handler
|
* @return Handler
|
||||||
* @throws Throwable Throwable
|
* @throws Throwable Throwable
|
||||||
*/
|
*/
|
||||||
private Handler<RoutingContext> getInterceptor() throws Throwable {
|
private Set<Handler<RoutingContext>> getInterceptorSet() {
|
||||||
// 配置拦截
|
// 配置拦截
|
||||||
Class<?> interceptorClass = Class.forName(SharedDataUtil.getValueForCustomConfig("interceptorClassPath"));
|
return getBeforeInterceptor().stream().map(BeforeInterceptor::doHandle).collect(Collectors.toSet());
|
||||||
Interceptor handleInstance = (Interceptor)ReflectionUtil.newWithNoParam(interceptorClass);
|
|
||||||
return handleInstance.doHandle();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -369,11 +365,13 @@ public class RouterHandlerFactory implements BaseHttpApi {
|
|||||||
fireJsonResponse(ctx, res);
|
fireJsonResponse(ctx, res);
|
||||||
} else if (res != null) {
|
} else if (res != null) {
|
||||||
fireJsonResponse(ctx, JsonResult.data(res));
|
fireJsonResponse(ctx, JsonResult.data(res));
|
||||||
|
} else {
|
||||||
|
handleAfterInterceptor(ctx, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}).onFailure(e -> fireJsonResponse(ctx, JsonResult.error(e.getMessage())));
|
}).onFailure(e -> fireJsonResponse(ctx, JsonResult.error(e.getMessage())));
|
||||||
} else {
|
} else {
|
||||||
ctx.response().headers().set(CONTENT_TYPE, MIMEType.TEXT_HTML.getValue());
|
fireTextResponse(ctx, data.toString());
|
||||||
ctx.end(data.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
@@ -404,4 +402,23 @@ public class RouterHandlerFactory implements BaseHttpApi {
|
|||||||
}
|
}
|
||||||
return fmt;
|
return fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<AfterInterceptor> getAfterInterceptor() {
|
||||||
|
Set<Class<? extends AfterInterceptor>> afterInterceptorClassSet =
|
||||||
|
reflections.getSubTypesOf(AfterInterceptor.class);
|
||||||
|
if (afterInterceptorClassSet == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return CommonUtil.sortClassSet(afterInterceptorClassSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set<BeforeInterceptor> getBeforeInterceptor() {
|
||||||
|
Set<Class<? extends BeforeInterceptor>> interceptorClassSet =
|
||||||
|
reflections.getSubTypesOf(BeforeInterceptor.class);
|
||||||
|
if (interceptorClassSet == null) {
|
||||||
|
return new HashSet<>();
|
||||||
|
}
|
||||||
|
return CommonUtil.sortClassSet(interceptorClassSet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package cn.qaiu.vx.core.interceptor;
|
||||||
|
|
||||||
|
import io.vertx.core.http.HttpServerRequest;
|
||||||
|
import io.vertx.core.json.JsonObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后置拦截器接口
|
||||||
|
*
|
||||||
|
* @author <a href="https://qaiu.top">QAIU</a>
|
||||||
|
*/
|
||||||
|
public interface AfterInterceptor {
|
||||||
|
|
||||||
|
void handle(HttpServerRequest request, JsonObject responseData);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,18 +4,16 @@ import io.vertx.core.Handler;
|
|||||||
import io.vertx.ext.web.RoutingContext;
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拦截器接口
|
* 前置拦截器接口
|
||||||
* <br>Create date 2021-05-06 09:20:37
|
|
||||||
*
|
*
|
||||||
* @author <a href="https://qaiu.top">QAIU</a>
|
* @author <a href="https://qaiu.top">QAIU</a>
|
||||||
*/
|
*/
|
||||||
public interface Interceptor {
|
public interface BeforeInterceptor {
|
||||||
|
|
||||||
default Handler<RoutingContext> doHandle() {
|
default Handler<RoutingContext> doHandle() {
|
||||||
return this::beforeHandle;
|
return this::handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void beforeHandle(RoutingContext context);
|
void handle(RoutingContext context);
|
||||||
|
|
||||||
void afterHandle(RoutingContext context);
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package cn.qaiu.vx.core.util;
|
package cn.qaiu.vx.core.util;
|
||||||
|
|
||||||
|
import cn.qaiu.vx.core.annotaions.HandleSortFilter;
|
||||||
import io.vertx.core.buffer.Buffer;
|
import io.vertx.core.buffer.Buffer;
|
||||||
import io.vertx.core.json.JsonObject;
|
import io.vertx.core.json.JsonObject;
|
||||||
import org.apache.commons.beanutils.ConvertUtils;
|
import org.apache.commons.beanutils.ConvertUtils;
|
||||||
@@ -15,6 +16,8 @@ import java.net.URL;
|
|||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CommonUtil
|
* CommonUtil
|
||||||
@@ -70,10 +73,11 @@ public class CommonUtil {
|
|||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
try(Socket ignored = new Socket(Address, port)) {
|
try (Socket ignored = new Socket(Address, port)) {
|
||||||
//建立一个Socket连接
|
//建立一个Socket连接
|
||||||
flag = true;
|
flag = true;
|
||||||
} catch (IOException ignoredException) {}
|
} catch (IOException ignoredException) {
|
||||||
|
}
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,4 +130,32 @@ public class CommonUtil {
|
|||||||
LocalConstant.put(configName, map);
|
LocalConstant.put(configName, map);
|
||||||
LOGGER.info("读取配置{}成功", configName);
|
LOGGER.info("读取配置{}成功", configName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> Set<T> sortClassSet(Set<Class<? extends T>> 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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
Normal file
17
core/src/main/java/cn/qaiu/vx/core/util/ResponseUtil.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
1
pom.xml
1
pom.xml
@@ -19,6 +19,7 @@
|
|||||||
<maven.compiler.source>17</maven.compiler.source>
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
|
||||||
<packageDirectory>${project.basedir}/web-service/target/package</packageDirectory>
|
<packageDirectory>${project.basedir}/web-service/target/package</packageDirectory>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package cn.qaiu.lz.common.interceptorImpl;
|
package cn.qaiu.lz.common.interceptorImpl;
|
||||||
|
|
||||||
import cn.qaiu.vx.core.base.BaseHttpApi;
|
import cn.qaiu.vx.core.annotaions.HandleSortFilter;
|
||||||
import cn.qaiu.vx.core.interceptor.Interceptor;
|
import cn.qaiu.vx.core.interceptor.BeforeInterceptor;
|
||||||
import cn.qaiu.vx.core.util.SharedDataUtil;
|
import cn.qaiu.vx.core.util.SharedDataUtil;
|
||||||
import io.vertx.core.json.JsonArray;
|
import io.vertx.core.json.JsonArray;
|
||||||
import io.vertx.ext.web.RoutingContext;
|
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;
|
import static cn.qaiu.vx.core.util.ConfigConstant.IGNORES_REG;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认拦截器实现
|
* 前置拦截器实现
|
||||||
* 校验用户是否合法 <br>
|
|
||||||
* TODO 暂时只做简单实现
|
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class DefaultInterceptor implements Interceptor, BaseHttpApi {
|
@HandleSortFilter(1)
|
||||||
|
public class DefaultInterceptor implements BeforeInterceptor {
|
||||||
|
|
||||||
|
|
||||||
protected final JsonArray ignores = SharedDataUtil.getJsonArrayForCustomConfig(IGNORES_REG);
|
protected final JsonArray ignores = SharedDataUtil.getJsonArrayForCustomConfig(IGNORES_REG);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeHandle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
|
System.out.println("进入前置拦截器->" + ctx.request().path());
|
||||||
|
|
||||||
ctx.next();
|
ctx.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterHandle(RoutingContext ctx) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ public interface IPanTool {
|
|||||||
case "uc" -> new UcTool(key, pwd);
|
case "uc" -> new UcTool(key, pwd);
|
||||||
case "ye" -> new YeTool(key, pwd);
|
case "ye" -> new YeTool(key, pwd);
|
||||||
case "fj" -> new FjTool(key, pwd);
|
case "fj" -> new FjTool(key, pwd);
|
||||||
|
case "qk" -> new QkTool(key, pwd);
|
||||||
default -> {
|
default -> {
|
||||||
throw new UnsupportedOperationException("未知分享类型");
|
throw new UnsupportedOperationException("未知分享类型");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class LzTool extends PanBase implements IPanTool {
|
|||||||
private String getJsText(String html) {
|
private String getJsText(String html) {
|
||||||
String jsTagStart = "<script type=\"text/javascript\">";
|
String jsTagStart = "<script type=\"text/javascript\">";
|
||||||
String jsTagEnd = "</script>";
|
String jsTagEnd = "</script>";
|
||||||
int index = html.indexOf(jsTagStart);
|
int index = html.lastIndexOf(jsTagStart);
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,20 @@
|
|||||||
package cn.qaiu.lz.common.parser.impl;
|
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.Future;
|
||||||
import io.vertx.core.Promise;
|
import io.vertx.core.Promise;
|
||||||
|
|
||||||
public class QkTool {
|
public class QkTool extends PanBase implements IPanTool {
|
||||||
public static Future<String> parse() {
|
|
||||||
|
public QkTool(String key, String pwd) {
|
||||||
|
super(key, pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Future<String> parse() {
|
||||||
Promise<String> promise = Promise.promise();
|
Promise<String> promise = Promise.promise();
|
||||||
|
|
||||||
|
promise.complete("https://lz.qaiu.top");
|
||||||
return promise.future();
|
return promise.future();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import cn.qaiu.vx.core.annotaions.RouteHandler;
|
|||||||
import cn.qaiu.vx.core.annotaions.RouteMapping;
|
import cn.qaiu.vx.core.annotaions.RouteMapping;
|
||||||
import cn.qaiu.vx.core.enums.RouteMethod;
|
import cn.qaiu.vx.core.enums.RouteMethod;
|
||||||
import cn.qaiu.vx.core.util.AsyncServiceUtil;
|
import cn.qaiu.vx.core.util.AsyncServiceUtil;
|
||||||
|
import cn.qaiu.vx.core.util.ResponseUtil;
|
||||||
import io.vertx.core.Future;
|
import io.vertx.core.Future;
|
||||||
import io.vertx.core.Promise;
|
import io.vertx.core.Promise;
|
||||||
import io.vertx.core.http.HttpServerRequest;
|
import io.vertx.core.http.HttpServerRequest;
|
||||||
@@ -44,8 +45,7 @@ public class ServerApi {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
IPanTool.shareURLPrefixMatching(url, pwd).parse().onSuccess(resUrl -> {
|
IPanTool.shareURLPrefixMatching(url, pwd).parse().onSuccess(resUrl -> {
|
||||||
response.putHeader("location", resUrl).setStatusCode(302).end();
|
ResponseUtil.redirect(response, resUrl, promise);
|
||||||
promise.complete();
|
|
||||||
}).onFailure(t -> promise.fail(t.fillInStackTrace()));
|
}).onFailure(t -> promise.fail(t.fillInStackTrace()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
promise.fail(e);
|
promise.fail(e);
|
||||||
@@ -72,8 +72,7 @@ public class ServerApi {
|
|||||||
code = keys[1];
|
code = keys[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
IPanTool.typeMatching(type, key, code).parse().onSuccess(resUrl -> response.putHeader("location", resUrl)
|
IPanTool.typeMatching(type, key, code).parse().onSuccess(resUrl -> ResponseUtil.redirect(response, resUrl)).onFailure(t -> {
|
||||||
.setStatusCode(302).end()).onFailure(t -> {
|
|
||||||
response.putHeader(CONTENT_TYPE, "text/html;charset=utf-8");
|
response.putHeader(CONTENT_TYPE, "text/html;charset=utf-8");
|
||||||
response.end(t.getMessage());
|
response.end(t.getMessage());
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -50,6 +50,12 @@ public class TestAESUtil {
|
|||||||
Assert.assertEquals(146731, AESUtils.idEncrypt("7jy0zlv"));
|
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
|
@Test
|
||||||
public void testTs() {
|
public void testTs() {
|
||||||
System.out.println(System.currentTimeMillis());
|
System.out.println(System.currentTimeMillis());
|
||||||
|
|||||||
Reference in New Issue
Block a user