spring boot jwt生成token

1、引入jwt依賴

<!--jwt的依賴-->
<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.18.3</version>
</dependency>

2、創建TokenUtils工具類

package com.pn.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.pn.entity.CurrentUser;
import com.pn.entity.User;    //實體類
import com.pn.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import java.time.Duration;
import java.util.Date;/*** token工具類*/
@Component
public class TokenUtils {//注入redis模板@Autowiredprivate StringRedisTemplate stringRedisTemplate;Redis  0庫// @Autowired// @Qualifier("reactiveRedisTemplateDb0")// private ReactiveRedisTemplate<String, Object> redis;//注入配置文件中的warehouse.expire-time屬性 -- token的過期時間@Value("${warehouse.expire-time}")private Long expireTime;/*** 常量:*///token中存放用戶id對應的名字private static final String CLAIM_NAME_USERID = "CLAIM_NAME_USERID";//token中存放用戶名對應的名字private static final String CLAIM_NAME_USERCODE = "CLAIM_NAME_USERCODE";//token中存放用戶真實姓名對應的名字private static final String CLAIM_NAME_USERNAME = "CLAIM_NAME_USERNAME";// 真正的生成的jwt token的方法private String sign(User user) {String token = JWT.create().withClaim(CLAIM_NAME_USERID, user.getUserId()).withClaim(CLAIM_NAME_USERCODE, user.getUserCode()).withClaim(CLAIM_NAME_USERNAME, user.getUserName()).withIssuedAt(new Date())//發行時間.withExpiresAt(new Date(System.currentTimeMillis() + (expireTime * 1000L)))//有效時間.sign(Algorithm.HMAC256(user.getUserPwd()));//指定簽名return token;}/*** 方法一,jwt生成的 token存Redis,用Redis判斷是否存在* 將當前用戶信息以用戶密碼為密鑰生成token的方法*/public String loginSign(User user){//生成tokenString token = sign(user);//將token保存到redis中,并設置token在redis中的過期時間//stringRedisTemplate.opsForValue().set(token, token, Duration.ofSeconds(28800)).subscribe();stringRedisTemplate.opsForValue().set(token, token, expireTime);return token;}/*** 方法二,解析前端jwt生成的token進行校驗* 創建CurrentUser實體類接收* 從客戶端歸還的token中獲取用戶信息的方法*/public CurrentUser getCurrentUser(String token) {if(StringUtils.isEmpty(token)){throw new BusinessException("令牌為空,請登錄!");}//對token進行解碼,獲取解碼后的tokenDecodedJWT decodedJWT = null;try {decodedJWT = JWT.decode(token);} catch (JWTDecodeException e) {throw new BusinessException("令牌格式錯誤,請登錄!");}//從解碼后的token中獲取用戶信息并封裝到CurrentUser對象中返回int userId = decodedJWT.getClaim(CLAIM_NAME_USERID).asInt();//用戶賬號idString userCode = decodedJWT.getClaim(CLAIM_NAME_USERCODE).asString();//用戶賬號String userName = decodedJWT.getClaim(CLAIM_NAME_USERNAME).asString();//用戶姓名if(StringUtils.isEmpty(userCode) || StringUtils.isEmpty(userName)){throw new BusinessException("令牌缺失用戶信息,請登錄!");}return new CurrentUser(userId, userCode, userName);}}

3、使用

//  注入token對象@Autowiredprivate TokenUtils tokenUtils;@RequestMapping("/login")public String login(@RequestBody LoginUser loginUser) {// 生成tokenString token = tokenUtils.loginSign("傳入實體類");System.out.println(token);return token ;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899029.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

豪越科技:融合低空經濟的消防一體化安全管控解決方案

在科技飛速發展的當下&#xff0c;2025 年低空經濟正處于規模化商用的關鍵節點&#xff0c;其在應急救援、物流配送等多領域展現出巨大潛力。豪越科技憑借其先進的消防一體化安全管控方案&#xff0c;與低空經濟深度融合&#xff0c;打造出一套更為高效、智能的消防解決方案&am…

清華大學 | DeepSeek第十版!《DeepSeek政務應用場景及解決方案》

清華大學發布的《DeepSeek政務應用場景及解決方案》研究報告&#xff0c;聚焦人工智能技術DeepSeek在政府治理與公共服務中的創新實踐&#xff0c;系統闡述了其如何通過智能化技術賦能政務數字化轉型&#xff0c;推動治理能力現代化。報告指出&#xff0c;DeepSeek作為融合大數…

R語言雙Y軸折線圖+相關性注釋

目錄 包和數據 作圖代碼及詳解 包和數據 rm(list ls()) library(ggpubr) library(scales) library(ggplot2)data <- iris##鳶尾花數據集 data1 <- data[1:30,c(1,2,3)] > head(data1)Sepal.Length Sepal.Width Petal.Length 1 5.1 3.5 …

Android Compose 框架隱式動畫之過渡動畫深入剖析(二十六)

Android Compose 框架隱式動畫之過渡動畫深入剖析 一、引言 在移動應用開發領域&#xff0c;用戶體驗始終是至關重要的。動畫效果作為提升用戶體驗的關鍵元素&#xff0c;能夠為應用增添生動性和交互性。Android Compose 作為現代 Android UI 工具包&#xff0c;為開發者提供…

sql server如何提高索引命中率

#新星杯14天創作挑戰營第9期# 前言 近期發現以前開發的系統運行緩慢&#xff0c;經排查&#xff0c;發現有很大的優化空間。數據庫版本使用的是sql server&#xff0c;主要有以下一些問題點&#xff1a;數據表無索引、一些不規范的寫法&#xff08;例如in、大表關聯&#xff0…

Qt進程間通信:QSharedMemory 使用詳解

1. 什么是 QSharedMemory&#xff1f; QSharedMemory 是 Qt 中用于進程間共享內存的類。它允許多個進程共享一塊內存區域&#xff0c;從而避免數據傳輸時的 IO 操作&#xff0c;提高通信速度。通過共享內存&#xff0c;多個進程可以直接讀寫這塊內存&#xff0c;而無需經過文件…

2024年3月全國計算機等級考試真題(二級C語言)

&#x1f600; 第1題 下列敘述中正確的是 A. 矩陣是非線性結構 B. 數組是長度固定的線性表 C. 對線性表只能作插入與刪除運算 D. 線性表中各元素的數據類型可以不同 題目解析&#xff1a; A. 矩陣是非線性結構 錯誤。矩陣通常是二維數組&#xff0c;屬…

基于Ebay拍賣網站成交價格的影響因素分析

摘要:近些年來網上拍賣的不斷地發展&#xff0c;網上購物慢慢變成了大家普遍接受的購物方式。因此關于網上拍賣的研究日益成為很多人研究的重點。 影響拍賣網站價格的因素很多&#xff0c;但很少有人分得清楚哪些因素才是比較重要的因素&#xff0c;因此對價格因素分析&#x…

Langchain中的表格解析:RAG 和表格的愛恨情仇

實現 RAG(Retrieval-Augmented Generation)是一個挑戰,尤其是在有效解析和理解非結構化文檔中的表格時。這在處理掃描文檔或圖像格式的文檔時尤為困難。這些挑戰至少包括以下三個方面: 1.表格的“叛逆期”:不準確的解析可能會破壞表格結構: 表格在文檔里就像個叛逆的青少…

Solr-搜索引擎-入門到精通

以下是對 Apache Solr 的簡介及其常用語法的快速入門指南&#xff1a; 一、Solr 是什么&#xff1f; ? 核心定位&#xff1a;Apache Solr 是一個基于 Lucene 的高性能、開源的搜索平臺&#xff0c;支持全文檢索、分詞、高亮、聚合統計等功能。 ? 核心功能&#xff1a; ? 全…

原生后臺GPS位置限制,降低功耗

1.后臺 GPS 位置限制的背景 為了控制功耗&#xff0c;Android 平臺對后臺應用獲取位置信息的頻率進行了限制。后臺的定義與后臺執行限制一致&#xff0c;即應用不在前臺運行時被視為后臺應用。 2.更新間隔限制&#xff1a; 后臺應用獲取位置信息的更新間隔不能超過一定閾值。…

Docker 搭建 PlantUML 服務:高效生成 UML 圖的最佳實踐

PlantUML 是一款開源的 UML 圖形生成工具&#xff0c;它支持生成類圖、時序圖、用例圖、活動圖等多種類型的 UML 圖&#xff0c;廣泛應用于軟件設計、文檔編寫以及團隊溝通中。通過 Docker 安裝 PlantUML&#xff0c;開發者可以快速搭建環境&#xff0c;輕松生成 UML 圖&#x…

簡鹿辦公匯總快速打開 Windows 資源管理器的幾種方式

無論你是剛開始使用電腦的新手&#xff0c;還是已經有一定經驗的用戶&#xff0c;了解如何在 Windows 系統中打開資源管理器都是一個非常基本且重要的技能。Windows 資源管理器&#xff08;現在稱為“文件資源管理器”&#xff09;是幫助你瀏覽、查找和管理計算機上所有文件的主…

嵌入式 python 安裝

下載嵌入式Python后解壓 https://www.python.org/ftp/python/3.12.9/python-3.12.9-embed-amd64.zip cd python-3.12.9-embed-amd64 安裝 pip .\python.exe .\get-pip.py 放開限制 嵌入式 Python 為了減少體積&#xff0c;默認會有一些限制。你需要編輯 python312._pth 文…

DeepSeek底層揭秘——GEMM

目錄 1. 什么是 GEMM&#xff1f; (1) 定義 (2) 核心目標 2. 核心功能 3. 對比傳統通用矩陣乘法庫 4. 技術要素 (1) 硬件感知優化 (2) 自動調優 (3) 高效內存管理 (4) 混合精度計算 5. 難點挑戰&#xff08;含解決方案&#xff09; 6. 技術路徑 7. 具體技術實現 8…

DNA-PAINT

參考: 【科研教程】NUPACK網頁版使用教程 https://www.bilibili.com/video/BV1G94y1W7mN/NUPACK新版網頁版教程-模擬部分 https://zhuanlan.zhihu.com/p/678730568NUPACK 4.0 User Guide https://docs.nupack.org/NUPACK網頁版使用指南 https://zhuanlan.zhihu.com/p/55024017…

小程序內表格合并功能實現—行合并

功能介紹&#xff1a;支付寶小程序手寫表格實現行內合并&#xff0c;依據動態數據自動計算每次需求合并的值&#xff0c;本次記錄行內合并&#xff0c;如果列內合并&#xff0c;同理即可實現 前端技術&#xff1a;grid布局 display&#xff1a;grid 先看實現效果: axml&…

計算機視覺cv2入門之角點檢測

角點是指圖像中兩條邊緣線的交點&#xff0c;這些交點通常代表了圖像中的重要特征。在計算機視覺中&#xff0c;角點檢測是一種關鍵的技術&#xff0c;它可以幫助我們從圖像中提取出這些重要的特征點&#xff0c;進而用于圖像匹配、物體識別、圖像拼接等多種應用。 角點檢測示例…

抽獎的誘惑系統注冊與登錄功能測試報告

目錄 一&#xff1a;項目背景 二&#xff1a;項目功能 &#xff08;1&#xff09; 注冊功能 &#xff08;2&#xff09; 登錄功能 電話 密碼登錄 電話 短信登錄 三&#xff1a;設計測試用例 四&#xff1a;功能測試 五&#xff1a;自動化測試代碼 七&#xff1a;遺留風…

【多媒體交互】Unity Kinect實現UI控件的點擊

在Unity中&#xff0c;通過Kinect實現UI控件的點擊功能&#xff0c;主要涉及手部追蹤、坐標映射和手勢檢測三個核心環節。 實現步驟 初始化Kinect與關節追蹤 使用KinectManager獲取用戶ID和手部關節點&#xff08;如JointType.HandLeft&#xff09;的坐標。 long userId _…