bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

如何在JWT中使用token-創(chuàng)新互聯(lián)

如何在JWT中使用token?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、做網(wǎng)站、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

JWT token的組成

頭部(Header),格式如下:

{ 
“typ”: “JWT”, 
“alg”: “HS256” 
}

由上可知,該token使用HS256加密算法,將頭部使用Base64編碼可得到如下個(gè)格式的字符串:

eyJhbGciOiJIUzI1NiJ9

有效載荷(Playload):

{ 
“iss”: “Online JWT Builder”, 
“iat”: 1416797419, 
“exp”: 1448333419, 
……. 
“userid”:10001 
}

有效載荷中存放了token的簽發(fā)者(iss)、簽發(fā)時(shí)間(iat)、過期時(shí)間(exp)等以及一些我們需要寫進(jìn)token中的信息。有效載荷也使用Base64編碼得到如下格式的字符串:

eyJ1c2VyaWQiOjB9

簽名(Signature):

將Header和Playload拼接生成一個(gè)字符串str=“eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOjB9”,使用HS256算法和我們提供的密鑰(secret,服務(wù)器自己提供的一個(gè)字符串)對str進(jìn)行加密生成最終的JWT,即我們需要的令牌(token),形如:str.”簽名字符串”。

token在服務(wù)與客戶端的交互流程

1:客戶端通過用戶名和密碼登錄
2:服務(wù)器驗(yàn)證用戶名和密碼,若通過,生成token返回給客戶端。
3:客戶端收到token后以后每次請求的時(shí)候都帶上這個(gè)token,相當(dāng)于一個(gè)令牌,表示我有權(quán)限訪問了
4:服務(wù)器接收(通常在攔截器中實(shí)現(xiàn))到該token,然后驗(yàn)證該token的合法性(為什么能驗(yàn)證下面說)。若該token合法,則通過請求,若token不合法或者過期,返回請求失敗。

關(guān)于Token的思考

服務(wù)如何判斷這個(gè)token是否合法?

由上面token的生成可知,token中的簽名是由Header和有效載荷通過Base64編碼生成再通過加密算法HS256和密鑰最終生成簽名,這個(gè)簽名位于JWT的尾部,在服務(wù)器端同樣對返回過來的JWT的前部分再進(jìn)行一次簽名生成,然后比較這次生成的簽名與請求的JWT中的簽名是否一致,若一致說明token合法。由于生成簽名的密鑰是服務(wù)器才知道的,所以別人難以偽造。

token中能放敏感信息嗎?
不能,因?yàn)橛行лd荷是經(jīng)過Base64編碼生成的,并不是加密。所以不能存放敏感信息。

Token的優(yōu)點(diǎn)

(1)相比于session,它無需保存在服務(wù)器,不占用服務(wù)器內(nèi)存開銷。
(2)無狀態(tài)、可拓展性強(qiáng):比如有3臺機(jī)器(A、B、C)組成服務(wù)器集群,若session存在機(jī)器A上,session只能保存在其中一臺服務(wù)器,此時(shí)你便不能訪問機(jī)器B、C,因?yàn)锽、C上沒有存放該Session,而使用token就能夠驗(yàn)證用戶請求合法性,并且我再加幾臺機(jī)器也沒事,所以可拓展性好就是這個(gè)意思。
(3)由(2)知,這樣做可就支持了跨域訪問。

Java實(shí)例:JWT token使用

部分代碼來自互聯(lián)網(wǎng),找不到原作者了。。

編寫JWT(Java Web Token)操作類:JavaWebToken

public class JavaWebToken {

  private static Logger log = LoggerFactory.getLogger(JavaWebToken.class);

  //該方法使用HS256算法和Secret:bankgl生成signKey
  private static Key getKeyInstance() {
    //We will sign our JavaWebToken with our ApiKey secret
    SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
    byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("bankgl");
    Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
    return signingKey;
  }

  //使用HS256簽名算法和生成的signingKey最終的Token,claims中是有效載荷
  public static String createJavaWebToken(Map<String, Object> claims) {
    return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, getKeyInstance()).compact();
  }

  //解析Token,同時(shí)也能驗(yàn)證Token,當(dāng)驗(yàn)證失敗返回null
  public static Map<String, Object> parserJavaWebToken(String jwt) {
    try {
      Map<String, Object> jwtClaims =
          Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(jwt).getBody();
      return jwtClaims;
    } catch (Exception e) {
      log.error("json web token verify failed");
      return null;
    }
  }
}

編寫登錄Conreoller,在服務(wù)器端給客戶返回token.

public LoginStatusMessage checkUserAndPassword(
  @RequestParam(value="username",required=true) String username,
  @RequestParam(value="password",required=true) String password,User user,HttpServletRequest request) throws Exception{
    User u = new User();
    //登錄成功
    if((u = userService.checkUsernameAndPassword(user)) != null){
      Map<String,Object> m = new HashMap<String,Object>();
      m.put("userid", user.getUserid());
      String token = JavaWebToken.createJavaWebToken(m);
      System.out.println(token);
      LoginStatusMessage lsm = new LoginStatusMessage();
      lsm.setUser(u);
      lsm.setToken(token);
      return lsm;
    };
    //登錄失敗,返回Null
    return null;
  }

在攔截器中對請求中的Token驗(yàn)證(部分代碼,表示下意思):

String token = request.getParameter("token");
      if(JavaWebToken.parserJavaWebToken(token) != null){
        //表示token合法
        return true;
      }else{
        //token不合法或者過期
        return false;
      }

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司的支持。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前題目:如何在JWT中使用token-創(chuàng)新互聯(lián)
新聞來源:http://vcdvsql.cn/article36/iidsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)ChatGPT搜索引擎優(yōu)化網(wǎng)站收錄品牌網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)