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头测试 响应登录失效
添加header头后 再次发送测试