一、引入依賴
###

###
~~~
<!-- JWT相關 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
~~~
###
二、創建生成和校驗jwt的工具類
###

###
具體代碼如下:
###
~~~
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;
}
}
~~~
###
編寫測試用例來進行校驗
###

###
具體測試用例代碼如下所示:
###
~~~
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當中解決跨域問題
- 打包以及后臺運行以及前端部署
- 多節點集群部署