最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用JWT的方法

 更新時間:2022年06月06日 14:40:40   作者:什么都干的派森  
這篇文章主要介紹了java使用JWT的方法,JWT是token的一種,一個JWT字符串包含三個部分分別是Header、Payload和Signature,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

一、簡介

JWT是token的一種,一個JWT字符串包含三個部分

1.Header

頭部信息,一般不需要聲明,默認為 HS256 簽名算法和 JWT 令牌類型

{
  "alg": "HS256",    // 指定簽名算法
  "typ": "JWT"		 // 指定token令牌類型
}

2.Payload

包含一些默認字段,還可以自定義一些私有字段,但是不要放敏感信息

iss: 發(fā)行人
exp: 到期時間
sub: 主題
aud: 用戶
nbf: 在此之前不可用
iat: 發(fā)布時間
jti: JWT ID用于標識該JWT

3.Signature

數(shù)據(jù)簽名,對上面兩部分進行數(shù)據(jù)簽名,Header部分和Payload部分先進行base64Url編碼,然后用英文句號拼接并加上一個自定義的secret字符串鹽值進行HS256對稱加密【也可以用其它算法或非對稱加密】

iss: 發(fā)行人
exp: 到期時間
sub: 主題
aud: 用戶
nbf: 在此之前不可用
iat: 發(fā)布時間
jti: JWT ID用于標識該JWT

4.組合

最后將 Header、Payload、Signature三部分用英文句號拼接就生成了完整的JWT

Header.Payload.Signature

二、封裝類

1.引入依賴

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

2.封裝方法

package com.cxstar.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;
import java.util.Calendar;
import java.util.Map;
public class JwtUtil {
    // 簽名密鑰
    private static final String SECRET = "hello JWT *%$#$&";
    /**
     * 生成token
     * @param payload token攜帶的信息
     * @return token字符串
     */
    public static String generateToken(Map<String,String> payload){
        // 指定token過期時間
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.HOUR, 24);  // 24小時
        JWTCreator.Builder builder = JWT.create();
        // 構(gòu)建payload
        payload.forEach(builder::withClaim);
        // 指定過期時間和簽名算法,并返回token
        String token = builder.withExpiresAt(calendar.getTime()).sign(Algorithm.HMAC256(SECRET));
        return token;
    }

    /**
     * 解析token
     * @param token token字符串
     * @return 解析后的token類
     */
    public static DecodedJWT decodeToken(String token){
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
        DecodedJWT decodedJWT = jwtVerifier.verify(token);
        return decodedJWT;
    }
}

三、使用方法

package com.cxstar;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.cxstar.utils.JwtUtil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class JwtLoginApplicationTests {
    @Test
    void tokenTest() {
        // 根據(jù)用戶信息生成令牌 --------------------------
        Map<String, String> payload = new HashMap<>();
        payload.put("userId", "233");
        payload.put("userName", "ps");
        String token = JwtUtil.generateToken(payload);
        System.out.println("token: " + token);
        // --------------------------------------------
        // 解析令牌并獲取用戶信息 ------------------------------------------------
        try {
            DecodedJWT decodedJWT = JwtUtil.decodeToken(token);
            String userId = decodedJWT.getClaim("userId").asString();
            String userName = decodedJWT.getClaim("userName").asString();
            String exp = decodedJWT.getExpiresAt().toString();
            System.out.println("userId: " + userId);      // 取出自定義屬性【用戶id】
            System.out.println("userName: " + userName);  // 取出自定義屬性【用戶名】
            System.out.println("exp: " + exp);            // 取出默認屬性【過期時間】
        } catch (JWTDecodeException e) {
            System.out.println("令牌錯誤");
        } catch (TokenExpiredException e) {
            System.out.println("令牌過期");
        }
        // -------------------------------------------------------------------
    }

}

在這里插入圖片描述

ps:最后附一篇寫的很詳細的JWT文章http://m.fzitv.net/article/250529.htm

到此這篇關(guān)于java使用JWT的文章就介紹到這了,更多相關(guān)java使用JWT內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis-plus批處理IService的實現(xiàn)示例

    mybatis-plus批處理IService的實現(xiàn)示例

    這篇文章主要介紹了mybatis-plus批處理IService的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 解讀HttpServletRequestWrapper處理request數(shù)據(jù)流多次讀取問題

    解讀HttpServletRequestWrapper處理request數(shù)據(jù)流多次讀取問題

    在Java Web開發(fā)中,獲取HTTP請求參數(shù)是常見需求,本文詳細討論了通過POST方式獲取參數(shù)的兩種主要方法:使用request.getParameter()適用于application/x-www-form-urlencoded和multipart/form-data內(nèi)容類型;而對于application/json類型的數(shù)據(jù)
    2024-10-10
  • Java實現(xiàn)短信驗證碼功能的完整代碼

    Java實現(xiàn)短信驗證碼功能的完整代碼

    這篇文章主要為大家詳細介紹了Java實現(xiàn)短信驗證碼功能的完整代碼,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2025-12-12
  • java實現(xiàn)動態(tài)代理示例分享

    java實現(xiàn)動態(tài)代理示例分享

    動態(tài)代理作為代理模式的一種擴展形式,廣泛應(yīng)用于框架(尤其是基于AOP的框架)的設(shè)計與開發(fā),本文將通過實例來講解Java動態(tài)代理的實現(xiàn)過程。
    2014-03-03
  • Java靜態(tài)方法不能調(diào)用非靜態(tài)成員的原因分析

    Java靜態(tài)方法不能調(diào)用非靜態(tài)成員的原因分析

    在Java中,靜態(tài)方法是屬于類的方法,而不是屬于對象的方法,它可以通過類名直接調(diào)用,無需創(chuàng)建對象實例,非靜態(tài)成員指的是類的實例變量和實例方法,它們需要通過對象實例才能訪問和調(diào)用,本文小編將和大家一起探討Java靜態(tài)方法為什么不能調(diào)用非靜態(tài)成員
    2023-10-10
  • Spring?Service功能作用詳細講解

    Spring?Service功能作用詳細講解

    service層測試較簡單,目前大多數(shù)測試主要是針對public方法進行的。依據(jù)測試方法劃分,可以分為兩種:基于mock的隔離測試和基于dbunit的普通測試
    2022-12-12
  • 利用Spring插件實現(xiàn)策略模式的案例詳解

    利用Spring插件實現(xiàn)策略模式的案例詳解

    Spring插件提供了一種更實用的插件開發(fā)方法,它提供了插件實現(xiàn)擴展核心系統(tǒng)功能的核心靈活性,但當然不提供核心OSGi功能,如動態(tài)類加載或運行時安裝和部署插件,本文就來聊下如何使用spring插件來實現(xiàn)策略模式,需要的朋友可以參考下
    2023-05-05
  • Spring?Data?JPA實現(xiàn)持久化存儲數(shù)據(jù)到數(shù)據(jù)庫的示例代碼

    Spring?Data?JPA實現(xiàn)持久化存儲數(shù)據(jù)到數(shù)據(jù)庫的示例代碼

    Spring Data JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套 JPA 應(yīng)?框架,可使開發(fā)者?極簡的代碼即可實現(xiàn)對數(shù)據(jù)庫的訪問和操作。本文我們來了解如何用Spring?Data?JPA框架實現(xiàn)數(shù)據(jù)持久化存儲到數(shù)據(jù)庫,感興趣的可以了解一下
    2022-04-04
  • Java使用jxl庫輕松玩轉(zhuǎn)Excel表操作

    Java使用jxl庫輕松玩轉(zhuǎn)Excel表操作

    jxl?是一個非常實用的?Java?庫,專門用于操作?Excel?表格,這篇文章主要為大家介紹了如何使用jxl進行Excel的基本操作,有需要的可以了解下
    2025-02-02
  • Maven構(gòu)建生命周期詳細介紹

    Maven構(gòu)建生命周期詳細介紹

    這篇文章主要介紹了Maven構(gòu)建生命周期詳細介紹,小編覺得還是挺不錯的,這里分享給大家,需要的朋友可以參考下。
    2017-11-11

最新評論

广灵县| 安庆市| 阿鲁科尔沁旗| 鞍山市| 台东县| 哈密市| 吴川市| 永登县| 阿拉善盟| 灵川县| 都兰县| 南昌市| 报价| 疏附县| 班戈县| 伊川县| 蒙阴县| 长春市| 本溪| 手机| 白河县| 安远县| 滁州市| 丽江市| 龙游县| 山阴县| 辰溪县| 丰宁| 黑河市| 樟树市| 宜兰市| 葫芦岛市| 叶城县| 故城县| 宜城市| 敖汉旗| 洞头县| 哈尔滨市| 樟树市| 丹江口市| 赤水市|