一、引入依赖
###
![](https://img.kancloud.cn/e2/3f/e23f53bfba3749ed8b65a212ba160510_1626x959.png)
###
~~~
<!-- JWT相关 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
~~~
###
二、创建生成和校验jwt的工具类
###
![](https://img.kancloud.cn/26/4a/264a97bca3d0b166131b9c614eddcff4_1521x974.png)
###
具体代码如下:
###
~~~
package net.xdclass.xdvideo.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import net.xdclass.xdvideo.domain.User;
import java.util.Date;
/*
* jwt工具类
* */
public class JwtUtils {
//主题 表示该JWT所面向的用户或实体
public static final String SUBJECT = "xdclass";
//过期时间 毫秒为单位 这里设置了一周的过期时间
public static final long EXPIRE = 1000*60*60*24*7;
//秘钥
public static final String APPSECRET = "xd666";
/*
* 生成jwt
* */
public static String geneJsonWebToken(User user){
if(user == null || user.getId() == null || user.getName() == null || user.getHeadImg() == null){
return null;
}
//String token = Jwts.builder(): 创建一个JWT构建器对象
//setSubject(SUBJECT): 设置JWT的主题字段为预定义的 SUBJECT,即"xdclass"
//claim("id",user.getId()): 向JWT添加一个自定义声明(claim),键为"id",值为用户的ID 其他也类似
//setIssuedAt(new Date()): 设置JWT的签发时间为当前时间
//setExpiration(new Date(System.currentTimeMillis()+EXPIRE)): 设置JWT的过期时间为当前时间加上预定义的过期时间 EXPIRE。
//signWith(SignatureAlgorithm.HS256,APPSECRET): 使用HS256算法以及预定义的密钥 APPSECRET 对JWT进行签名
//compact(): 构建并返回JWT字符串表示形式
String token = Jwts.builder().setSubject(SUBJECT)
.claim("id",user.getId())
.claim("name",user.getName())
.claim("img",user.getHeadImg())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis()+EXPIRE))
.signWith(SignatureAlgorithm.HS256,APPSECRET)
.compact();
return token;
}
/*
* 校验token
* @param token
* @return
* */
public static Claims checkJWT(String token){
try{
final Claims claims = Jwts.parser().setSigningKey(APPSECRET)
.parseClaimsJws(token)
.getBody();
return claims;
}catch(Exception e){}
return null;
}
}
~~~
###
编写测试用例来进行校验
###
![](https://img.kancloud.cn/6e/2b/6e2b1098b38a98b318b3e87319683dbd_1494x984.png)
###
具体测试用例代码如下所示:
###
~~~
package net.xdclass.xdvideo;
import io.jsonwebtoken.Claims;
import net.xdclass.xdvideo.domain.User;
import net.xdclass.xdvideo.utils.JwtUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
@RunWith(SpringRunner.class)
@SpringBootTest
public class JwtTestController {
@Test
public void testGeneJwt(){
User user = new User();
user.setId(999);
user.setHeadImg("www.xdclass.net");
user.setName("xd");
String token = JwtUtils.geneJsonWebToken(user);
System.out.println(token);
}
@Test
public void testCheck(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4ZGNsYXNzIiwiaWQiOjk5OSwibmFtZSI6InhkIiwiaW1nIjoid3d3LnhkY2xhc3MubmV0IiwiaWF0IjoxNzExMTU3NDc2LCJleHAiOjE3MTE3NjIyNzZ9.r6n8MgcgjmeYfpwR_JKbBoNA2fSM4dNzihQY2s6v1ZQ";
Claims claims = JwtUtils.checkJWT(token);
if(claims != null){
String name = (String) claims.get("name");
String img = (String) claims.get("img");
int id = (Integer) claims.get("id");
System.out.println(name + img + String.valueOf(id));
}else{
System.out.println("非法token");
}
}
}
~~~
- springboot2项目创建
- 分层分包以及资源文件的创建
- Mysql逆向工程效率神器创建domain实体类(DAO层)
- application.properties配置文件自动映射到实体类
- 通过junit单元测试配置文件自动映射到实体类
- 整合Mybatis访问数据库和阿里巴巴数据源
- 增删改查步骤以及细节记录
- 控制器请求参数的传递
- mybatis当中的动态sql语句创建和使用套路
- mybatis当中的分页插件的使用
- springboot2当中jwt的使用
- 增加统一响应结果类
- 微信登录之微信开放平台介绍
- 网站应用微信登录时序图解释说明
- 获取微信开放平台扫码链接URL地址
- HttpClient4.x工具获取使用以及Get和Post模拟请求类编写
- 配置内网穿透让微信服务器可以回调到开发环境地址
- 获取微信access_token以及openid进而获取用户信息
- 保存微信用户信息的注意点
- 保存完微信用户信息之后生成jwt返回前端
- springboot2登陆拦截器
- 微信支付前期资料说明
- 订单的增删改查Dao层编写
- 单元测试的实现步骤
- UUID生成和MD5加密工具类编写
- xml转map map转xml以及签名sign算法工具类
- 下单生成sign签名以及xml整体流程代码实现一
- 调用微信统一下单接口获取相应map拿到二维码地址
- 二维码地址转换为图片让用户扫码支付
- 微信回调处理之更新订单状态和幂等性讲解
- springboot当中开启事务
- 定义全局异常类
- 项目当中Logback或者log4j增加打点日志
- 前后端联调注意事项
- springboot当中解决跨域问题
- 打包以及后台运行以及前端部署
- 多节点集群部署