日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

在Java中使用Jwt的示例代碼

瀏覽:27日期:2022-08-14 09:43:14
JWT 特點

JWT 默認(rèn)是不加密,但也是可以加密的。生成原始 Token 以后,可以用密鑰再加密一次。

JWT 不加密的情況下,不能將秘密數(shù)據(jù)寫入 JWT。

JWT 不僅可以用于認(rèn)證,也可以用于交換信息。有效使用 JWT,可以降低服務(wù)器查詢數(shù)據(jù)庫的次數(shù)。

JWT 的最大缺點是,由于服務(wù)器不保存 session 狀態(tài),因此無法在使用過程中廢止某個 token,或者更改 token 的權(quán)限。也就是說,一旦 JWT 簽發(fā)了,在到期之前就會始終有效,除非服務(wù)器部署額外的邏輯。

JWT 本身包含了認(rèn)證信息,一旦泄露,任何人都可以獲得該令牌的所有權(quán)限。為了減少盜用,JWT 的有效期應(yīng)該設(shè)置得比較短。對于一些比較重要的權(quán)限,使用時應(yīng)該再次對用戶進行認(rèn)證。

1. JWT 的原理

Jwt官網(wǎng):https://jwt.io/

JWT 的原理是,服務(wù)器認(rèn)證以后,生成一個 JSON 對象,發(fā)回給用戶,就像下面這樣。

{ 'name': 'John Doe', '角色': '管理員', '到期時間': '2018年7月1日0點0分'}

以后,用戶與服務(wù)端通信的時候,都要發(fā)回這個 JSON 對象。服務(wù)器完全只靠這個對象認(rèn)定用戶身份。為了防止用戶篡改數(shù)據(jù),服務(wù)器在生成這個對象的時候,會加上簽名(詳見后文)。

服務(wù)器就不保存任何 session 數(shù)據(jù)了,也就是說,服務(wù)器變成無狀態(tài)了,從而比較容易實現(xiàn)擴展。

2. JWT 的數(shù)據(jù)結(jié)構(gòu)

JWT 大概就像下面這樣。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

它是一個很長的字符串,中間用點(.)分隔成三個部分。注意,JWT 內(nèi)部是沒有換行的,這里只是為了便于展示,將它寫成了幾行。

JWT 的三個組成部分依次如下。

· Header(頭部) · Payload(負載) · Signature(簽名)

# 寫成一行,就是下面的樣子Header.Payload.Signature2.1 Header

Header 部分是一個 JSON 對象,描述 JWT 的元數(shù)據(jù),通常是下面的樣子。

{ 'alg': 'HS256', 'typ': 'JWT'}

上面代碼中,alg屬性表示簽名的算法(algorithm),默認(rèn)是 HMAC SHA256(寫成 HS256);typ屬性表示這個令牌(token)的類型(type),JWT 令牌統(tǒng)一寫為JWT。

最后,將上面的 JSON 對象使用 Base64URL 算法轉(zhuǎn)成字符串。

2.2 Payload

Payload 部分也是一個 JSON 對象,用來存放實際需要傳遞的數(shù)據(jù)。JWT 規(guī)定了7個官方字段,供選用。

iss (issuer):簽發(fā)人 exp (expiration time):過期時間 sub (subject):主題 aud (audience):受眾 nbf (Not Before):生效時間 iat (Issued At):簽發(fā)時間 jti (JWT ID):編號

除了官方字段,你還可以在這個部分定義私有字段,下面就是一個例子

{ 'sub': '1234567890', 'name': 'John Doe', 'admin': true}

JWT 默認(rèn)是不加密的,任何人都可以讀到,所以不要把秘密信息放在這個部分。

這個 JSON 對象也要使用 Base64URL 算法轉(zhuǎn)成字符串。

2.3 Signature

Signature 部分是對前兩部分的簽名,防止數(shù)據(jù)篡改。

首先,需要指定一個密鑰(secret)。這個密鑰只有服務(wù)器才知道,不能泄露給用戶。然后,使用 Header 里面指定的簽名算法(默認(rèn)是 HMAC SHA256),按照下面的公式產(chǎn)生簽名。

HMACSHA256( base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret)

算出簽名以后,把 Header、Payload、Signature 三個部分拼成一個字符串,每個部分之間用'點'(.)分隔,就可以返回給用戶。

3. 在 Java 中使用

依賴,這里使用的是 jjwt

<!-- Jwt https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt --><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version></dependency>

使用

class DemoApplicationTests { // 加鹽秘鑰 private String secret = 'jwtSecretValue'; public static void main(String[] args) { // 創(chuàng)建token String token = this.createToken(20);// String token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.L1cCfQpCSzPOrxbHVqiMaT8ndRlZd2PuHzYE2TIqUA0'; System.out.println('token --> ' + token); // 解析token this.parseToken(token); } // 創(chuàng)建token public String createToken(Integer time) { // 過期時間, 默認(rèn)10秒過期 time = time == null ? 10 : time; long l = new Date().getTime() + time * 1000; Date expire = new Date(l); // 自定義信息 Map<String, Object> map = new HashMap<>(); map.put('name', 'admin'); JwtBuilder claim = Jwts.builder() // 設(shè)置簽名算法和加鹽秘鑰 .signWith(SignatureAlgorithm.HS256, secret) // 設(shè)置過期時間 .setExpiration(expire) // 自定義內(nèi)容接受一個map .setClaims(map) // 唯一id {'id': '9527'} .setId('9527') // JWT的主體 {'sub': 'jwtSubject'} .setSubject('jwtSubject') // jwt的簽發(fā)時間 {'iat': '1618383146'} .setIssuedAt(new Date()); // 自定義內(nèi)容{'name': 'admin'}// .claim('name', 'admin'); String token = claim.compact(); // 解析token, jwt是經(jīng)過Base64編碼的// String[] ts = token.split('.');// for (String s : ts) {// System.out.print(s + ' --> ');// System.out.println(Base64Codec.BASE64.decodeToString(s));// }// System.out.println('==============================='); return token; } // 解析token public void parseToken(String token) { System.out.println('====================開始解析JWT===================='); System.out.println('token --> ' + token); try { Claims body = Jwts.parser() // 簽名秘鑰 .setSigningKey(secret) // 要解析的jwt .parseClaimsJws(token) .getBody(); System.out.println('id --> ' + body.getId()); System.out.println('sub --> ' + body.getSubject()); System.out.println('自定義內(nèi)容 name --> ' + body.get('name')); System.out.println('iat 創(chuàng)建時間 --> ' + body.getIssuedAt()); Date expiration = body.getExpiration(); System.out.print('過期時間 --> '); System.out.println(expiration == null ? expiration : expiration.toLocaleString()); } catch (Exception e) { e.printStackTrace(); System.out.println('無效Token'); } System.out.println('====================JWT解析結(jié)束===================='); }}

到此這篇關(guān)于在Java中使用Jwt的示例代碼的文章就介紹到這了,更多相關(guān)Java使用Jwt內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲福利一区| 日韩午夜高潮| 久久不卡日韩美女| 国产日韩精品视频一区二区三区| 日本不卡一二三区黄网| 日韩激情精品| 国产精品亲子伦av一区二区三区| 美女视频一区在线观看| 国精品产品一区| 欧美激情一区| 波多视频一区| 免费精品国产的网站免费观看| 9久re热视频在线精品| 久久最新视频| 天堂va欧美ⅴa亚洲va一国产| 日韩精品一区二区三区免费视频 | 国产综合婷婷| 国产精品免费看| 日韩欧美精品一区二区综合视频| 91欧美极品| caoporn视频在线| 欧美日韩在线网站| 亚洲欧美日本日韩| 欧美在线日韩| 国产精选在线| 在线视频亚洲| 国产欧美在线观看免费| 欧美片第1页| 99亚洲视频| 欧美三级第一页| 98精品视频| 欧美专区一区二区三区| 欧美一区网站| 久久男人av资源站| 91久久中文| 国产精品伊人| 久久中文字幕av| 啪啪亚洲精品| 99久久精品网| 欧美久久久网站| 久久久久99| 久久国际精品| 欧美国产91| 欧美日韩伊人| 国内亚洲精品| 国产日韩亚洲| 国产精品99一区二区| 日本欧美一区| 欧美中文一区二区| 青草国产精品| 久久婷婷激情| 国产日韩在线观看视频| 欧美/亚洲一区| 国产精品调教视频| 91久久午夜| 精品视频在线一区二区在线| 国产精品美女久久久| 麻豆视频一区| 亚洲网址在线观看| 日韩欧美不卡| 久久国内精品自在自线400部| 伊人精品一区| 老司机精品视频网| 水野朝阳av一区二区三区| 久久中文欧美| 手机精品视频在线观看| 捆绑调教日本一区二区三区| 日韩视频一二区| 亚洲一级黄色| 精品国产美女a久久9999| 视频在线在亚洲| 青青久久av| 精品欧美视频| 日本午夜精品一区二区三区电影| 午夜日韩av| 日本一区二区免费高清| 日韩精品久久理论片| 欧美日韩国产一区精品一区| 成人午夜毛片| 欧美日韩一区二区三区不卡视频| 免费欧美一区| 97精品国产| 欧美91在线|欧美| 日韩区欧美区| 免费日韩av| 国产高清久久| 国产欧美一区二区三区精品酒店| 国产毛片一区二区三区| 伊人国产精品| 一本色道精品久久一区二区三区| 精精国产xxxx视频在线播放| 精品久久久网| 麻豆视频观看网址久久| 欧美亚洲tv| 亚洲精品系列| 狠狠干综合网| 视频一区中文| 欧美日中文字幕| 成人va天堂| 欧美少妇精品| 日韩av在线播放网址| 精品三级久久久| 国产精品sss在线观看av| 日本一区免费网站| 在线精品福利| 蜜桃一区二区三区在线观看| 亚洲在线成人| 午夜一级在线看亚洲| 亚洲成人一区| 视频二区不卡| 中国字幕a在线看韩国电影| 久久91视频| 国产一区精品福利| 国内揄拍国内精品久久| 麻豆极品一区二区三区| 国产精品国产三级在线观看| 国产欧美一区二区三区国产幕精品| 午夜亚洲福利| 日韩久久一区| 国产日韩精品视频一区二区三区| 青青草视频一区| 国产精品一国产精品| 国产精品高潮呻吟久久久久| 国产精品久久久网站| 美女av一区| 精品美女视频 | 欧美国产日本| 国产不卡精品在线| 福利片在线一区二区| а√在线中文在线新版| 日本欧美不卡| 亚洲免费观看| 免费视频一区二区| 综合亚洲色图| 久久国产乱子精品免费女| 国产精品流白浆在线观看| 久久精品xxxxx| 精品欠久久久中文字幕加勒比| 成人台湾亚洲精品一区二区| 欧美freesex黑人又粗又大| 亚洲性视频h| 视频一区在线播放| 日本欧美在线| 国产专区精品| 欧美+亚洲+精品+三区| 免费在线观看精品| 日韩欧美2区| 欧美国产日韩电影| 日韩专区精品| 天堂va蜜桃一区二区三区| 91嫩草精品| 国产精品久久久一区二区| 91欧美在线| 国产精品日本| 国产精品亚洲综合久久| 日韩中文在线电影| 日韩制服丝袜av| 国产高清精品二区| 性欧美xxxx免费岛国不卡电影| 亚洲永久精品唐人导航网址| 久久av免费| 欧美影院三区| 日韩国产精品久久久| 精品欧美视频| 黄色精品网站| 国产精品一区二区99| 日韩大片在线观看| 一区视频在线| 国产免费播放一区二区| 国产精品久久久久av电视剧| 蜜桃伊人久久| 精品国产精品国产偷麻豆 | а√天堂8资源中文在线| 欧美日韩国产免费观看| 日韩精品视频网| 成人欧美一区二区三区的电影| 亚洲神马久久| 久久一区视频| 免费毛片在线不卡| 国产精品入口久久| 亚洲激情中文在线| 欧美交a欧美精品喷水| 在线一区视频| 国产一区二区三区不卡视频网站 | 中文字幕在线看片| 亚洲日本久久| 日韩精品2区| 日本视频在线一区| 亚洲不卡av不卡一区二区| 日韩高清电影一区| 在线成人动漫av| 国产精品对白久久久久粗| 国产精品av一区二区| 欧美精品不卡| 蜜臀久久久99精品久久久久久| 色婷婷综合网| 日韩手机在线| 日韩午夜在线| 黄在线观看免费网站ktv| 日本电影久久久|