JWT(2):JWT入门使用
生活随笔
收集整理的這篇文章主要介紹了
JWT(2):JWT入门使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 第一節 如何使用JWT
- 1. 引入依賴
- 2. 生成token
- 3. 解析token
- 4. 常見異常
- 5. 封裝JWT方法
- 第二節 JWT登錄和驗證
- 1. 登錄
- 2. 攔截器
- 3. 獲取用戶信息
前言
JWT如何生成token?
token如何驗簽?
springboot中如何使用JWT?
如果你對JWT的概念不了解,建議先閱讀JWT的介紹,以方便對JWT的構成有清晰的認識,當然這并不影響你對JWT的使用。
詳細可以查看 JWT(1): JWT介紹
英文較好的可以查閱官方的介紹:https://jwt.io/introduction
第一節 如何使用JWT
1. 引入依賴
<!--引入jwt--><!-- https://mvnrepository.com/artifact/com.auth0/java-jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.0.0</version></dependency>2. 生成token
@Testpublic void testJWTCreate(){String token=createToken();System.out.println(token);}public String createToken(){Calendar instance=Calendar.getInstance();instance.add(Calendar.SECOND,60);//默認包header加密是HS256,通常不需要設置 // JWT.create().withHeader()HashMap<String,Object> map=new HashMap<>();String token= JWT.create().withHeader(map).withClaim("userId",1) //指定用戶信息.withClaim("name","xiaowang") //指定用戶名.withExpiresAt(instance.getTime()) //指定過期時間.sign(Algorithm.HMAC256("%sabs*!3ja"));//簽名return token;}運行結果
3. 解析token
@Testpublic void testVerification(){String token=createToken();JWTVerifier jwtVerifier=JWT.require(Algorithm.HMAC256("%sabs*!3ja")).build();DecodedJWT verify=jwtVerifier.verify(token);//解析jwtSystem.out.println(verify.getClaims());}運行結果
4. 常見異常
- SignatureVerificationException 簽名異常
- TokenExpiredException Token失效異常
- JWTDecodeException JWT解析異常
- InvalidClaimException 有效負載無效異常
- AlgorithmMismatchException 簽名算法不匹配
5. 封裝JWT方法
package com.it2.springbootjwt.util;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT;import java.util.Calendar; import java.util.Map;/*** JWT*/ public class JWTUtils {/*** 密鑰*/private static final String SECRET = "FTIq]>h!>2H-zd_";/*** 生成token** @param map* @param amount 有效期秒* @return*/public static String createToken(Map<String, String> map, Integer amount) {Calendar instance = Calendar.getInstance();/*** 簽名失效時間如果不傳遞,則默認7天*/amount = (null == amount || amount < 1) ? 7 * 24 * 60 * 60 : amount;instance.add(Calendar.SECOND, amount);//默認包header加密是HS256,通常不需要設置JWTCreator.Builder builder = JWT.create();map.forEach((k, v) -> {builder.withClaim(k, v);});String token = builder.withExpiresAt(instance.getTime()) //指定過期時間.sign(Algorithm.HMAC256(SECRET));//簽名return token;}/*** 驗簽** @param token*/public static void vertifyToken(String token) {getTokenInfo(token);}/*** 獲取token信息** @param token*/public static DecodedJWT getTokenInfo(String token) {JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build();DecodedJWT verify = jwtVerifier.verify(token);//解析jwtreturn verify;} }第二節 JWT登錄和驗證
1. 登錄
2. 攔截器
我們的業務在執行的時候,顯然需要編寫token是否有效,但是這明顯不可能放在各個業務中去鑒定。
所以我們需要使用攔截器,攔截器可以在業務執行前判斷請求的token是否有效。
如果不傳遞token ,或者傳遞無效的token ,則無法通過攔截器,不能執行業務。
3. 獲取用戶信息
顯然我們在執行業務時,有時候需要獲取用戶的信息。那么我們可以通過header中獲取。
@GetMapping("/hello/sayHello")public String sayHello(HttpServletRequest request) {String token= request.getHeader("token");DecodedJWT jwt=JWTUtils.getTokenInfo(token);System.out.println( jwt.getClaim("username").asString());System.out.println( jwt.getClaim("userid").asString());log.info("sayhello....");return "success";}運行結果
總結
以上是生活随笔為你收集整理的JWT(2):JWT入门使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上云安全建设之CDN安全防护
- 下一篇: vue图片滑动验证