天天看点

Vert.x3支持JWT知识背景:个人结论:

知识背景:

              那年还是菜鸟,开始暗恋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