SpringBoot Vert.x 六(拦截器Handler)

在Vertx中 注册的Handler 其实是类似责任链模式(只是依据功能进行推测,没具体看过源码。)

在同一个api地址上 可以注册多个handler ,当前面的Handle 中断,后面的Handler则不会再执行

新增Handler 拦截器 用于拦截header 头中 accesstoken字段为空的请求

@Component
public class TokenCheckHandler implements Handler<RoutingContext> {
    @Override
    public void handle(RoutingContext event) {
        HttpServerRequest request = event.request();
        String accesstoken = request.getHeader("accesstoken");
        if (StringUtils.isEmpty(accesstoken)) {
            VertxRespone.build(event).respone(new ResponeWrapper(10002, null, "登录失效,请重新登录!"));
        } else {
            //继续下一个路由
            event.next();
        }
    }
}

改造 VerticleMain

@Component
@Slf4j
public class VerticleMain extends AbstractVerticle {

    @Autowired
    TokenCheckHandler tokenCheckHandler;
    ......
      
          @Override
    public void start() throws Exception {
        super.start();
        //路由
        Router router = Router.router(vertx);
        //添加token拦截器
        router.route().path("/api/*").handler(tokenCheckHandler);
        //注册Controller
        for (String packagePath : controllerBasePackage) {
            registerController(router, packagePath);
        }
        router.route().failureHandler(handler -> {
            handler.failure().printStackTrace();
        });
        //start listen port
        HttpServer server = vertx.createHttpServer();
        server.requestHandler(router).listen(8888, handler -> {
            log.info("vertx run prot : [{}] run state : [{}]", 8888, handler.succeeded());
        });
    }

使用Postman 发送未加header头测试 响应登录失效

QQ20200131-234027@2x

添加header头后 再次发送测试

QQ20200131-234208@2x

Github 源码