摘要:簡(jiǎn)介為網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行一種基于開(kāi)放標(biāo)準(zhǔn)認(rèn)證用戶身份信息認(rèn)證成功,才可獲取其它資源,如用戶登錄最重要作用對(duì)信息防偽的原理一個(gè)由三個(gè)部分組成公共部分私有部分簽名部分。
? ? ? ? ? ? ? 為網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行一種基于JSON開(kāi)放標(biāo)準(zhǔn)
? ? ? ? ? ? ? 認(rèn)證成功,才可獲取其它資源,如:用戶登錄
? ? ? ? ? ? ? 對(duì) token信息防偽
? ? ? ? ? ? ? 一個(gè)JWT由三個(gè)部分組成:公共部分、私有部分、簽名部分。最后由這三者組合進(jìn)行
? ? ? ? ? ? ? base64編碼得到JWT
? ? ? ? ? ? ? 如圖:? ? ? ?
? ? ??
? ? ? ? ? ? (1.4.1)公共部分
? ? ? ? ? ? ? ? ? ? ? ? ? ?主要是該JWT的相關(guān)配置參數(shù),比如簽名的加密算法、格式類型、過(guò)期時(shí)間等等
? ? ? ? ? ? ? ? ? ? ? ? ? ? Key=ATGUIGU
? ? ? ? ? ? ?(1.4.2)私有部分
? ? ? ? ? ? ? ? ? ? ? ? ? ? 用戶自定義的內(nèi)容,根據(jù)實(shí)際需要真正要封裝的信息
? ? ? ? ? ? ? ? ? ? ? ? ? ? userInfo{用戶Id,用戶昵稱nickName}
? ? ? ? ? ? ?(1.4.3)簽名部分
? ? ? ? ? ? ? ? ? ? ? ? ? ? SaltiP:當(dāng)前服務(wù)器的IP地址!{linux 中配置代理服務(wù)器IP}
? ? ? ? ? ? ? ? ? ? ? ? ? ? 主要用戶對(duì)JWT生成字符串的時(shí)候,進(jìn)行加密{鹽值}
? ? ? ? ? ? ? ? ? ? ? ? ? ? 最終組成:key+salt+userInfo è token!
? ? ? ? ? ? ? ? ? ? ? ? ? ? base64編碼:并不是加密,只是把明文信息變成了不可見(jiàn)的字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? 但是其實(shí)只要用一些工具就 ,可以把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 {? ? ? ? ? ? ?//過(guò)期時(shí)間 ? ? ? ? ? ?private static long tokenExpiration = 24*60*60*1000; ? ? ? ? ? ?//簽名秘鑰 ? ? ? ? ? ?private static String tokenSignKey = "123456";? ? ? ? ? ? ?//根據(jù)參數(shù)生成token ? ? ? ? ? ?public static String createToken(Long userId, String userName) { ? ? ? ? ? ? ? ?String token = Jwts.builder() ? ? ? ? ? ? ? ? ? ? ? .setSubject("項(xiàng)目名或其它") ? ? ? ? ? ? ? ? ? ? ? .setExpiration(new Date(System.currentTimeMillis() + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tokenExpiration)) ? ? ? ? ? ? ? ? ? ? ? .claim("userId", userId) ? ? ? ? ? ? ? ? ? ? ? .claim("userName", userName) ? ? ? ? ? ? ? ? ? ? ? .signWith(SignatureAlgorithm.HS512, tokenSignKey) ? ? ? ? ? ? ? ? ? ? ? .compressWith(CompressionCodecs.GZIP) ? ? ? ? ? ? ? ? ? ? ? .compact(); ? ? ? ? ? ? ? ?return token; ? ? ? ? ? }? ? ? ? ? ? ?//根據(jù)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(); ? ? ? ? ? }? ? ? ? ? ? ?//根據(jù)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調(diào)用JWT工具類生成即可
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/122096.html
摘要:一前言,是為了在網(wǎng)絡(luò)環(huán)境間傳遞聲明而執(zhí)行的一種基于的開(kāi)放標(biāo)準(zhǔn)。用戶簽發(fā)添加中間件校驗(yàn)判斷是否可用獲取解密,獲取用戶名和認(rèn)證失敗中添加處理此處在開(kāi)發(fā)時(shí)需要過(guò)濾掉登錄接口,否則會(huì)導(dǎo)致驗(yàn)證永遠(yuǎn)失敗。前端處理前端開(kāi)發(fā)使用的是,發(fā)送請(qǐng)求使用的是。 一、前言 JWT(JSON Web Token),是為了在網(wǎng)絡(luò)環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)(RFC 7519)。 JWT不是一個(gè)新...
摘要:在使用非對(duì)稱加密算法進(jìn)行簽名的時(shí)候,還可以用于驗(yàn)證的發(fā)件人是否與中申明的發(fā)件人是同一個(gè)人。如果沒(méi)有用非對(duì)稱加密算法的話,把復(fù)制之后直接可以去官網(wǎng)在線解析。 這篇博客主要是簡(jiǎn)單介紹了一下什么是JWT,以及如何在Spring Boot項(xiàng)目中使用JWT(JSON Web Token)。 1.關(guān)于JWT 1.1 什么是JWT 老生常談的開(kāi)頭,我們要用這樣一種工具,首先得知道以下幾個(gè)問(wèn)題。 這...
閱讀 2219·2021-11-19 09:40
閱讀 1932·2021-11-08 13:24
閱讀 2463·2021-10-18 13:24
閱讀 2867·2021-10-11 10:57
閱讀 3592·2021-09-22 15:42
閱讀 1127·2019-08-29 17:11
閱讀 2538·2019-08-29 16:11
閱讀 2430·2019-08-29 11:11