知识背景:
那年还是菜鸟,开始暗恋Java,像其他的菜鸟一样开始慢慢接触面向对象,硕士之前接触都是c、c++,其实对于面向对象的理解停留在认知阶段,后来自嘲没有女朋友,我可以new一个出来,现在有暗恋开始明恋,到然后喜欢上python,不过自从接触vert.x3和RXJava、netty后,又再次燃烧起我的欲望,最近接收需要为app提供微服务,对于无状态的,没有session、cookie,我们唯一能够提供的方式就是token,JSON Web Tokens(JWT).
JWT生成的token150个字符
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE0NTEzMDQ3OTgsImV4cCI6MTQ1MTMwNDg1OH0=.5kK9_8s1ZyGZ-6EBN1wF01Mzxw1g-WZQzYXSFC_C41Y=
我们通过这个token进行交换,来进行权限的验证,是否该用户能否访问我们的服务端数据。
http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html
我把token的放入我的redis中,存放时间为一分钟,然后加入refreshtoken存放10分钟,一般来说refreshtoken肯定比token时间要长,因为你还需要通过refreshtoken来获取token,refreshtoken是经过md5加密后,进行存放。
// this route is excluded from the auth handler router.get("/api/newToken").handler(ctx -> { ctx.response().putHeader("Content-Type", "text/plain"); String generateToken = jwt.generateToken(new JsonObject(), new JWTOptions().setExpiresInSeconds(1 * 60)); ctx.response().end(generateToken); redisCacheService.put("token", generateToken, 1 * 60); byte[] result = Base64.encodeBase64(generateToken.getBytes()); System.out.println(" refreshToken " + new String(result)); System.out.println(" token " + generateToken); redisCacheService.put(new String(result), generateToken, 10 * 60); });
router.get("/refreshToken").handler(ctx -> { ctx.response().putHeader("Content-Type", "text/plain"); ctx.response().end(redisCacheService.get("")); } );
至于需要鉴权校验,需要使用到如下的包
<!-- spring-boot framework end--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-auth-jwt</artifactId> <version>${vertx.version}</version> </dependency>
Router router = Router.router(vertx); router.route("/*").handler(SoloAuthProvider.create(vertx, redisCacheService)); router.route("/*").handler(req -> { LOGGER.info("Any requests to URI starting '/' require login"); // No auth required req.next(); }); // Create a JWT Auth Provider JWTAuth jwt = JWTAuth.create(vertx, new JsonObject() .put("keyStore", new JsonObject() .put("type", "jceks") .put("path", "keystore.jceks") .put("password", "secret")));
至于vert.x3如何使用就不在这里过多叙述,在前面的文章已有聊过。
个人结论:
app的微服务校验这块完成后,接下来都是业务功能的开发,至于你是用spring、spring-boot以及mybatis还是其它的ORM不外乎就是增删改处理工作。
ps:有提供坐标杭州或者上海的公司的架构岗位,请随时联系本人,具体联系方式可以访问http://ibyoung.github.io
相关推荐
Vert.x 支持部署和取消部署 Verticles,便于动态调整应用结构。 5. **DNS 客户端**: - 提供 DNS 查询功能,方便应用处理域名解析问题。 6. **文件系统访问**: - 支持读写文件、目录操作,满足应用对本地文件...
3. **模块化设计**:vert.x 支持模块化的应用结构,使得组件之间解耦,易于维护和扩展。你可以通过`vertx.createHttpServer()`等工厂方法创建不同的服务模块,如HTTP服务器、TCP服务器、WebSocket服务器等。 4. **...
Vert.x是事件驱动的,其处理请求的高性能也是基于其事件机制。Vert.x的事件机制中有几个非常重要的概念:Event Loop、Event Loop Vertical、Worker Vertical、Event Bus、Vert.x Module。 Event Loop:即事件循环,...
- **反应式编程**:vert.x 支持反应式编程范式,这意味着系统会根据输入的变化自动调整,无需显式控制流。这有助于构建可扩展和容错的应用程序。 - **模块化架构**:vert.x 应用由多个独立的模块(verticles)组成...
Vert.x 支持多种编程语言,包括Java、JavaScript、Ruby等,且具有高度的可扩展性和灵活性。 Spring Boot是Spring框架的简化版,旨在简化创建独立的、生产级别的基于Spring的应用程序。它集成了大量常用功能,如...
与Node.js相比,Vert.x提供了更多的语言支持,包括Java、JavaScript、Ruby、Groovy和 Kotlin,同时利用了Java虚拟机(JVM)的优势。 【描述】提到"比Node.Js更快",这可能是因为Vert.x利用了JVM的并发模型,如Event...
Vert.x的核心设计理念是提供一个轻量级的运行时环境,支持多种编程语言,包括Java、JavaScript、Ruby、Groovy等,使得开发者可以灵活地选择适合项目需求的语言。 【描述】"源码下载 博文链接:...
vertx-kue, Vert.x Blueprint项目 Vert.x Kue,这是由 Vert.x 支持的优先级任务队列 Vert.x Kue Vert.x Kue 是用 Vert.x 开发的优先级任务队列,并以的Redis支持。 它是 automattic/kue的Vert.x 实现版本。这个蓝图...
4. **分布式**:Vert.x支持跨多个节点的事件总线通信,使得构建分布式系统变得更加简单。它可以轻松地与其他微服务进行交互,实现横向扩展。 5. **可扩展**:Vert.x允许开发者用Java、JavaScript、Ruby、Groovy等...
** Vert.x 概述 ** Vert.x 是一个轻量级、高性能且反应式的应用开发框架,主要用于构建现代的、事件驱动的、非阻塞式的Java应用程序。它支持多种编程语言,包括Java、JavaScript、Ruby、Groovy和 Kotlin,提供了一...
- **功能**:设置Vert.x实例中支持的Worker线程的最大数量。 - **默认值**:20。 - **应用场景**:Worker线程主要用于执行阻塞任务,例如数据库访问、文件I/O等。合理配置Worker线程的数量对于确保良好的响应时间和...
与Node.js相比,Vert.x更加灵活,因为它支持多种编程语言如JavaScript、Ruby、Groovy、Java等,甚至可以在同一项目中混合使用这些语言。 #### 二、Vert.x的核心概念 为了更好地理解Vert.x的线程模型,我们首先需要...
《Vert.x应用开发实例教程》旨在为Vert.x的初学者和大中专院校学生提供易于入门,全面了解和掌握Vert.x框架技术和应用的教材和辅导资料,为使用Vert.x开发实时应用和企业级应用打下良好的基础。
2. **多语言支持**:虽然主要用Java编写,但Vert.x 提供了API接口,支持其他如JavaScript、Ruby、Groovy、Ceylon等多种语言,这使得开发人员可以选择他们最熟悉的语言进行开发。 3. **模块化系统**:Vert.x 允许...
- **多语言环境:** Vert.x 支持多种语言,包括 Java、Groovy、Ruby、Scala、JavaScript 等,这使得开发者可以根据项目需求选择最适合的语言进行开发。 **2.5 数据库集成** - **数据访问:** Vert.x 提供了对多种...
vert.x是内存占用极小的快速开发框架,springboot模版项目
摘要:作为异步无阻塞的网络框架,Vert.x的参照物是Node.js,基本可以完成Node.js能完成的所有事情。它是作者目前见过功能最强大,依赖第三方库最少的Java框架。本文将带你深入了解Vert.x。Vert.x的由来Vert.x诞生于...
Eclipse Vert.x is event driven and non blocking. This means your app can handle a lot of concurrency using a small number of kernel threads. Vert.x lets your app scale with minimal hardware.
Vert.x是一个基于事件驱动模型的轻量级框架,支持多种语言(如Java、Groovy等),其核心特性包括: - **高性能与可伸缩性**:能够高效处理高并发请求。 - **异步编程模型**:通过非阻塞I/O提高应用程序的整体性能。 ...