11package cn .qaiu .vx .core .handlerfactory ;
22
3- import cn .qaiu .vx .core .annotaions .DateFormat ;
4- import cn .qaiu .vx .core .annotaions .RouteHandler ;
5- import cn .qaiu .vx .core .annotaions .RouteMapping ;
6- import cn .qaiu .vx .core .annotaions .SockRouteMapper ;
3+ import cn .qaiu .vx .core .annotaions .*;
74import cn .qaiu .vx .core .base .BaseHttpApi ;
8- import cn .qaiu .vx .core .enums . MIMEType ;
9- import cn .qaiu .vx .core .interceptor .Interceptor ;
5+ import cn .qaiu .vx .core .interceptor . AfterInterceptor ;
6+ import cn .qaiu .vx .core .interceptor .BeforeInterceptor ;
107import cn .qaiu .vx .core .model .JsonResult ;
118import cn .qaiu .vx .core .util .*;
129import io .vertx .core .Future ;
@@ -75,21 +72,22 @@ public RouterHandlerFactory(String gatewayPrefix) {
7572 * 开始扫描并注册handler
7673 */
7774 public Router createRouter () {
78- Router router = Router .router (VertxHolder .getVertxInstance ());
75+ // 主路由
76+ Router mainRouter = Router .router (VertxHolder .getVertxInstance ());
7977
8078 // 静态资源
8179 String path = SharedDataUtil .getJsonConfig ("server" )
8280 .getString ("staticResourcePath" );
8381 if (!StringUtils .isEmpty (path )) {
8482 // 静态资源
85- router .route ("/*" ).handler (StaticHandler
83+ mainRouter .route ("/*" ).handler (StaticHandler
8684 .create (path )
8785 .setCachingEnabled (true )
8886 .setDefaultContentEncoding ("UTF-8" ));
8987 }
9088
9189
92- router .route ().handler (ctx -> {
90+ mainRouter .route ().handler (ctx -> {
9391 LOGGER .debug ("The HTTP service request address information ===>path:{}, uri:{}, method:{}" ,
9492 ctx .request ().path (), ctx .request ().absoluteURI (), ctx .request ().method ());
9593 ctx .response ().headers ().add (ACCESS_CONTROL_ALLOW_ORIGIN , "*" );
@@ -100,11 +98,15 @@ public Router createRouter() {
10098 ctx .next ();
10199 });
102100 // 添加跨域的方法
103- router .route ().handler (CorsHandler .create ().addRelativeOrigin (".*" ).allowCredentials (true ).allowedMethods (httpMethods ));
101+ mainRouter .route ().handler (CorsHandler .create ().addRelativeOrigin (".*" ).allowCredentials (true ).allowedMethods (httpMethods ));
104102
105103 // 配置文件上传路径
106- router .route ().handler (BodyHandler .create ().setUploadsDirectory ("uploads" ));
104+ mainRouter .route ().handler (BodyHandler .create ().setUploadsDirectory ("uploads" ));
107105
106+ // 拦截器
107+ Set <Handler <RoutingContext >> interceptorSet = getInterceptorSet ();
108+ Route route0 = mainRouter .route ("/*" );
109+ interceptorSet .forEach (route0 ::handler );
108110
109111 try {
110112 Set <Class <?>> handlers = reflections .getTypesAnnotatedWith (RouteHandler .class );
@@ -118,7 +120,7 @@ public Router createRouter() {
118120 for (Class <?> handler : sortedHandlers ) {
119121 try {
120122 // 注册请求处理方法
121- registerNewHandler (router , handler );
123+ registerNewHandler (mainRouter , handler );
122124 } catch (Throwable e ) {
123125 LOGGER .error ("Error register {}, Error details:" , handler , e .getCause ());
124126
@@ -128,12 +130,12 @@ public Router createRouter() {
128130 LOGGER .error ("Manually Register Handler Fail, Error details:" + e .getMessage ());
129131 }
130132 // 错误请求处理
131- router .errorHandler (405 , ctx -> fireJsonResponse (ctx , JsonResult
133+ mainRouter .errorHandler (405 , ctx -> fireJsonResponse (ctx , JsonResult
132134 .error ("Method Not Allowed" , 405 )));
133- router .errorHandler (404 , ctx -> ctx .response ().setStatusCode (404 ).setChunked (true )
135+ mainRouter .errorHandler (404 , ctx -> ctx .response ().setStatusCode (404 ).setChunked (true )
134136 .end ("Internal server error: 404 not found" ));
135137
136- return router ;
138+ return mainRouter ;
137139 }
138140
139141 /**
@@ -157,8 +159,6 @@ private void registerNewHandler(Router router, Class<?> handler) throws Throwabl
157159 method -> method .isAnnotationPresent (SockRouteMapper .class )
158160 ).toList ());
159161
160- // 拦截器
161- Handler <RoutingContext > interceptor = getInterceptor ();
162162 // 依次注册处理方法
163163 for (Method method : methodList ) {
164164 if (method .isAnnotationPresent (RouteMapping .class )) {
@@ -177,8 +177,6 @@ private void registerNewHandler(Router router, Class<?> handler) throws Throwabl
177177
178178 // 设置默认超时
179179 route .handler (TimeoutHandler .create (SharedDataUtil .getCustomConfig ().getInteger (ROUTE_TIME_OUT )));
180- // 先执行拦截方法, 再进入业务请求
181- route .handler (interceptor );
182180 route .handler (ctx -> handlerMethod (instance , method , ctx )).failureHandler (ctx -> {
183181 if (ctx .response ().ended ()) return ;
184182 ctx .failure ().printStackTrace ();
@@ -235,11 +233,9 @@ private String getRouteUrl(String methodName, String mapperValue) {
235233 * @return Handler
236234 * @throws Throwable Throwable
237235 */
238- private Handler <RoutingContext > getInterceptor () throws Throwable {
236+ private Set < Handler <RoutingContext >> getInterceptorSet () {
239237 // 配置拦截
240- Class <?> interceptorClass = Class .forName (SharedDataUtil .getValueForCustomConfig ("interceptorClassPath" ));
241- Interceptor handleInstance = (Interceptor )ReflectionUtil .newWithNoParam (interceptorClass );
242- return handleInstance .doHandle ();
238+ return getBeforeInterceptor ().stream ().map (BeforeInterceptor ::doHandle ).collect (Collectors .toSet ());
243239 }
244240
245241 /**
@@ -369,11 +365,13 @@ private void handlerMethod(Object instance, Method method, RoutingContext ctx) {
369365 fireJsonResponse (ctx , res );
370366 } else if (res != null ) {
371367 fireJsonResponse (ctx , JsonResult .data (res ));
368+ } else {
369+ handleAfterInterceptor (ctx , null );
372370 }
371+
373372 }).onFailure (e -> fireJsonResponse (ctx , JsonResult .error (e .getMessage ())));
374373 } else {
375- ctx .response ().headers ().set (CONTENT_TYPE , MIMEType .TEXT_HTML .getValue ());
376- ctx .end (data .toString ());
374+ fireTextResponse (ctx , data .toString ());
377375 }
378376 }
379377 } catch (Throwable e ) {
@@ -404,4 +402,23 @@ private String getFmt(Annotation[] parameterAnnotations, CtClass v) {
404402 }
405403 return fmt ;
406404 }
405+
406+ @ Override
407+ public Set <AfterInterceptor > getAfterInterceptor () {
408+ Set <Class <? extends AfterInterceptor >> afterInterceptorClassSet =
409+ reflections .getSubTypesOf (AfterInterceptor .class );
410+ if (afterInterceptorClassSet == null ) {
411+ return null ;
412+ }
413+ return CommonUtil .sortClassSet (afterInterceptorClassSet );
414+ }
415+
416+ private Set <BeforeInterceptor > getBeforeInterceptor () {
417+ Set <Class <? extends BeforeInterceptor >> interceptorClassSet =
418+ reflections .getSubTypesOf (BeforeInterceptor .class );
419+ if (interceptorClassSet == null ) {
420+ return new HashSet <>();
421+ }
422+ return CommonUtil .sortClassSet (interceptorClassSet );
423+ }
407424}
0 commit comments