SLK的个人博客

  • 首页

  • 搜索
LRU Stack ThreadLocal Nacos RejectedExecutionHandler Executor RocketMQ ConcurrentHashMap CyclicBarrier Semaphore CountDownLatch canal Unsafe Atomic BlockingQueue AQS ReentrantLock Synchronized MESI Volatile JMM BufferPool Explain MySQL 常量池 Arthas JVM调优 三色标记 CMS ParNew 垃圾收集器 G1 Java Redis Android HTTPDNS DNS ioc 爬虫 seleniumhq 推荐引擎 Mahout IM Netty Vert.x HashMap 梯子 翻墙 V2ray Docker 搜索引擎 SpringBoot elasticsearch

SpringBoot Vert.x 六(拦截器Handler)

发表于 2020-01-31 | 分类于 Java | 0 | 阅读次数 910

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 源码

# LRU # Stack # ThreadLocal # Nacos # RejectedExecutionHandler # Executor # RocketMQ # ConcurrentHashMap # CyclicBarrier # Semaphore # CountDownLatch # canal # Unsafe # Atomic # BlockingQueue # AQS # ReentrantLock # Synchronized # MESI # Volatile # JMM # BufferPool # Explain # MySQL # 常量池 # Arthas # JVM调优 # 三色标记 # CMS # ParNew # 垃圾收集器 # G1 # Java # Redis # Android # HTTPDNS # DNS # ioc # 爬虫 # seleniumhq # 推荐引擎 # Mahout # IM # Netty # Vert.x # HashMap # 梯子 # 翻墙 # V2ray # Docker # 搜索引擎 # SpringBoot # elasticsearch
SpringBoot Vert.x 五(Body as Json)
改造HasMap为链式写法 简化key value
  • 文章目录
  • 站点概览
宋龙宽

宋龙宽

87 日志
13 分类
53 标签
RSS
Github E-mail
Creative Commons
Links
  • 黑客派
  • Relyn
  • 张小妞的博客
  • ElasticSearch教程
© 2021 宋龙宽
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4