JWT 1 (基本认识、与springboot整合)

本文介绍JWT(JSON Web Token)的基本概念,演示如何使用Java生成和解析JWT,并展示JWT与Spring Boot项目的整合应用,包括创建项目、引入JWT依赖、利用拦截器进行JWT验证。

1、基本认识

jwt : JSON Web Token, json形式的web令牌 。常用于前后端分离项目的安全验证。

jwt应用场景:
1、一次性验证:比如邮箱注册,返回给你的连接可能就是jwt
2、restful api 的无状态认证,可以代替session

jwt的token由三部分构成,将这三段信息文本用.链接一起就构成了Jwt字符串。
如下例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

这三部分分别叫做:header、playload、signature

  • header : 声明类型、加密算法
  • playload :存放有效信息,如签发者、用户、签发时间等
  • signature : 由前两部分组合然后加盐加密构成

2、生成token、解析

1、依赖

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

2、生成token

        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.SECOND,200);                  // 200秒

        String token = JWT.create()
                .withClaim("userid", 12)                   // payload
                .withClaim("username", "zhang")
                .withExpiresAt(instance.getTime())         // 设置过期时间,200秒
                .sign(Algorithm.HMAC256("123ABCD!"));      // 密钥

        System.out.println(token);

如上代码输出内容

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTE2Mjc0ODksInVzZXJpZCI6MTIsInVzZXJuYW1lIjoiemhhbmcifQ.JeEaSypQrT0Dxtix4ljS1LSvjdYoF8Q0zZ9_y3yajBA

3、根据令牌和签名解析数据

        // 创建验证对象
        JWTVerifier jwt_v = JWT.require(Algorithm.HMAC256("123ABCD!")).build();
        // 根据密钥获取 存有token数据的对象
        DecodedJWT verify = jwt_v.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTE2Mjc0ODksInVzZXJpZCI6MTIsInVzZXJuYW1lIjoiemhhbmcifQ.JeEaSypQrT0Dxtix4ljS1LSvjdYoF8Q0zZ9_y3yajBA");

		// 打印数据
        System.out.println(verify.getClaim("userid").asInt());
        System.out.println(verify.getClaim("username").asString());
        // 打印过期时间
        System.out.println(verify.getExpiresAt());

执行 根据令牌和签名解析数据 时如果出现以下内容表示令牌过期了
在这里插入图片描述
下面是各种异常对应的解释
在这里插入图片描述

3、与spring boot整合使用

3.1、准备使用场景(创建项目)

创建一个springboot项目
下面是要用到的依赖

	    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		<!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.19</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--lombok-->
         <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

配置文件 application.properties

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jwt?characterEncoding=UTF-8
spring.datasource.password=root
spring.datasource.username=root

mybatis.type-aliases-package=com.beaninj.entity
mybatis.mapper-locations=classpath:com/beaninj/mapper/*.xml

logging.level.com.beaninj.dao=debug

新建数据库jwt、表user

CREATE DATABASE jwt
use jwt

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `pwd` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值