摘要:簡介為網絡應用環境間傳遞聲明而執行一種基于開放標準認證用戶身份信息認證成功,才可獲取其它資源,如用戶登錄最重要作用對信息防偽的原理一個由三個部分組成公共部分私有部分簽名部分。
? ? ? ? ? ? ? 為網絡應用環境間傳遞聲明而執行一種基于JSON開放標準
? ? ? ? ? ? ? 認證成功,才可獲取其它資源,如:用戶登錄
? ? ? ? ? ? ? 對 token信息防偽
? ? ? ? ? ? ? 一個JWT由三個部分組成:公共部分、私有部分、簽名部分。最后由這三者組合進行
? ? ? ? ? ? ? base64編碼得到JWT
? ? ? ? ? ? ? 如圖:? ? ? ?
? ? ??
? ? ? ? ? ? (1.4.1)公共部分
? ? ? ? ? ? ? ? ? ? ? ? ? ?主要是該JWT的相關配置參數,比如簽名的加密算法、格式類型、過期時間等等
? ? ? ? ? ? ? ? ? ? ? ? ? ? Key=ATGUIGU
? ? ? ? ? ? ?(1.4.2)私有部分
? ? ? ? ? ? ? ? ? ? ? ? ? ? 用戶自定義的內容,根據實際需要真正要封裝的信息
? ? ? ? ? ? ? ? ? ? ? ? ? ? userInfo{用戶Id,用戶昵稱nickName}
? ? ? ? ? ? ?(1.4.3)簽名部分
? ? ? ? ? ? ? ? ? ? ? ? ? ? SaltiP:當前服務器的IP地址!{linux 中配置代理服務器IP}
? ? ? ? ? ? ? ? ? ? ? ? ? ? 主要用戶對JWT生成字符串的時候,進行加密{鹽值}
? ? ? ? ? ? ? ? ? ? ? ? ? ? 最終組成:key+salt+userInfo è token!
? ? ? ? ? ? ? ? ? ? ? ? ? ? base64編碼:并不是加密,只是把明文信息變成了不可見的字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? 但是其實只要用一些工具就 ,可以把base64編碼解成明文
? ? ? ? ? ? ? ? ? ? ? ? ? ? 所以不要在JWT中放入涉及私密信息
? ? JSON Web Token Introduction - jwt.iohttps://jwt.io/introduction
? ? ? ? ? ? ? ?? ? ? ? ? ? io.jsonwebtoken ? ? ? ? ? ?jjwt ? ? ? ?
? ? ? ?import io.jsonwebtoken.*; ? ? ? ?import org.springframework.util.StringUtils; ? ? ? ?import java.util.Date;? ? ? ? ?/** ? ? ? ? * JWT生成token工具類 ? ? ? ? */ ? ? ? ?public class JwtHelper {? ? ? ? ? ? ?//過期時間 ? ? ? ? ? ?private static long tokenExpiration = 24*60*60*1000; ? ? ? ? ? ?//簽名秘鑰 ? ? ? ? ? ?private static String tokenSignKey = "123456";? ? ? ? ? ? ?//根據參數生成token ? ? ? ? ? ?public static String createToken(Long userId, String userName) { ? ? ? ? ? ? ? ?String token = Jwts.builder() ? ? ? ? ? ? ? ? ? ? ? .setSubject("項目名或其它") ? ? ? ? ? ? ? ? ? ? ? .setExpiration(new Date(System.currentTimeMillis() + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tokenExpiration)) ? ? ? ? ? ? ? ? ? ? ? .claim("userId", userId) ? ? ? ? ? ? ? ? ? ? ? .claim("userName", userName) ? ? ? ? ? ? ? ? ? ? ? .signWith(SignatureAlgorithm.HS512, tokenSignKey) ? ? ? ? ? ? ? ? ? ? ? .compressWith(CompressionCodecs.GZIP) ? ? ? ? ? ? ? ? ? ? ? .compact(); ? ? ? ? ? ? ? ?return token; ? ? ? ? ? }? ? ? ? ? ? ?//根據token字符串得到用戶id ? ? ? ? ? ?public static Long getUserId(String token) { ? ? ? ? ? ? ? ?if(StringUtils.isEmpty(token)) return null;? ? ? ? ? ? ? ? ?JwsclaimsJws = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); ? ? ? ? ? ? ? ?Claims claims = claimsJws.getBody(); ? ? ? ? ? ? ? ?Integer userId = (Integer)claims.get("userId"); ? ? ? ? ? ? ? ?return userId.longValue(); ? ? ? ? ? }? ? ? ? ? ? ?//根據token字符串得到用戶名稱 ? ? ? ? ? ?public static String getUserName(String token) { ? ? ? ? ? ? ? ?if(StringUtils.isEmpty(token)) return "";? ? ? ? ? ? ? ? ?Jws claimsJws = ? ? ? ? ? ? ? ? ? ? ? ? ? Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); ? ? ? ? ? ? ? ?Claims claims = claimsJws.getBody(); ? ? ? ? ? ? ? ?return (String)claims.get("userName"); ? ? ? ? ? }? ? ? ? ? ? ?public static void main(String[] args) { ? ? ? ? ? ? ? ?String token = JwtHelper.createToken(1L, "lucy"); ? ? ? ? ? ? ? ?System.out.println(token); ? ? ? ? ? ? ? ?System.out.println(JwtHelper.getUserId(token)); ? ? ? ? ? ? ? ?System.out.println(JwtHelper.getUserName(token)); ? ? ? ? ? } ? ? ? }
? ? ? ? ? ? ? ? 在需要生成token調用JWT工具類生成即可
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122096.html
摘要:一前言,是為了在網絡環境間傳遞聲明而執行的一種基于的開放標準。用戶簽發添加中間件校驗判斷是否可用獲取解密,獲取用戶名和認證失敗中添加處理此處在開發時需要過濾掉登錄接口,否則會導致驗證永遠失敗。前端處理前端開發使用的是,發送請求使用的是。 一、前言 JWT(JSON Web Token),是為了在網絡環境間傳遞聲明而執行的一種基于JSON的開放標準(RFC 7519)。 JWT不是一個新...
摘要:在使用非對稱加密算法進行簽名的時候,還可以用于驗證的發件人是否與中申明的發件人是同一個人。如果沒有用非對稱加密算法的話,把復制之后直接可以去官網在線解析。 這篇博客主要是簡單介紹了一下什么是JWT,以及如何在Spring Boot項目中使用JWT(JSON Web Token)。 1.關于JWT 1.1 什么是JWT 老生常談的開頭,我們要用這樣一種工具,首先得知道以下幾個問題。 這...
閱讀 2183·2021-11-19 09:40
閱讀 1917·2021-11-08 13:24
閱讀 2452·2021-10-18 13:24
閱讀 2858·2021-10-11 10:57
閱讀 3577·2021-09-22 15:42
閱讀 1114·2019-08-29 17:11
閱讀 2527·2019-08-29 16:11
閱讀 2421·2019-08-29 11:11