欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:Java JWT加密、解密

柚子快報激活碼778899分享:Java JWT加密、解密

http://yzkb.51969.com/

介紹

????????JSON Web 令牌 (JWT) 是一種開放標(biāo)準(zhǔn) (RFC 7519),它定義了一種緊湊且獨立的方式,用于作為 JSON 對象在各方之間安全地傳輸信息。由于此信息已進行數(shù)字簽名,因此可以對其進行驗證和信任。可以使用密鑰(使用?HMAC?算法)或使用?RSA?或?ECDSA?的公鑰/私鑰對對 JWT 進行簽名。

1、引入包

com.auth0

java-jwt

3.8.1

io.jsonwebtoken

jjwt

3.8.1

2、簽名算法

/**

* 簽名算法

*/

private static final SignatureAlgorithm signatureAlgorithm;

3、靜態(tài)實例化值

/**

* 靜態(tài)默認值

*/

static {

signatureAlgorithm = SignatureAlgorithm.HS512;

}

4、加密

/**

* 前三個參數(shù)為自己用戶token的一些信息比如id,權(quán)限,名稱等。不要將隱私信息放入(大家都可以獲取到)

*

* @param map 參數(shù)

* @param base64Security 密鑰

* @return 返回結(jié)果

*/

public static String createJwt(Map map, String base64Security) {

//添加構(gòu)成JWT的參數(shù)

JwtBuilder builder = builderJwt(map, base64Security);

//生成JWT token

return builder.compact();

}

/**

* 前三個參數(shù)為自己用戶token的一些信息比如id,權(quán)限,名稱等。不要將隱私信息放入(大家都可以獲取到)

*

* @param map 參數(shù)

* @param base64Security 密鑰

* @param expiration 過期時間

* @return 返回結(jié)果

*/

public static String createJwt(Map map, String base64Security, long expiration) {

//添加構(gòu)成JWT的參數(shù)

JwtBuilder builder = builderJwt(map, base64Security);

builder.setExpiration(new Date(expiration));

//生成JWT

return builder.compact();

}

/**

* 構(gòu)建 jwt

*

* @param map 值

* @param base64Security 密鑰

* @return 返回結(jié)果

*/

private static JwtBuilder builderJwt(Map map, String base64Security) {

return Jwts.builder().setHeaderParam("typ", "JWT")

.setClaims(map)

//估計是第三段密鑰

.signWith(signatureAlgorithm, base64Security.getBytes());

}

5、解密

/**

* 解密

*

* @param jsonWebToken token

* @param base64Security 密鑰

* @return 返回結(jié)果

*/

public static Claims parseJwt(String jsonWebToken, String base64Security) {

try {

Claims claims = Jwts.parser()

.setSigningKey(base64Security.getBytes())

.parseClaimsJws(jsonWebToken).getBody();

return claims;

} catch (Exception ex) {

ex.printStackTrace();

return null;

}

}

6、檢查token

/**

* 檢查token

*

* @param jwtToken token

* @param base64Security base64安全性

* @param userAgent 用戶代理

* @return 返回 redis token

* @throws Exception 異常信息

*/

public static String checkToken(String jwtToken, String base64Security, String userAgent) throws GlobalException {

String token;

try {

Claims claims = parseJwt(jwtToken, base64Security);

long effective = IntegerConsts.TWENTY_FOUR * IntegerConsts.SIXTY * IntegerConsts.SIXTY;

Long time = ConvertUtils.convertLong(claims.get(BusinessConsts.TIME));

if (time <= IntegerConsts.ZERO) {

time = ConvertUtils.convertLong(claims.get(BusinessConsts.EXP));

}

// 驗證 token 是否過期

LocalDateTime localDateTime = LocalDateUtils.timestampToLocalDateTime(time)

.plusSeconds(effective);

if (LocalDateUtils.greater(localDateTime, LocalDateTime.now())) {

throw new GlobalException("token 過期!");

}

// 驗證 token 簽名

Object loginName = claims.get(BusinessConsts.USER_NAME);

if (StringUtils.isNullAndSpaceOrEmpty(loginName)) {

loginName = claims.get(BusinessConsts.LOGIN_NAME);

}

StringBuilder builder = new StringBuilder();

builder.append(String.format("loginName=%s&effective=%s&time=%s&userAgent=%s", loginName, effective, time, userAgent));

token = String.valueOf(claims.get(BusinessConsts.HEADER_TOKEN));

String tokenPassword = Md5Utils.getMd5(builder.toString());

if (!tokenPassword.equals(token)) {

throw new GlobalException("token 簽名驗證失??!");

}

} catch (Exception ex) {

String message = "token 驗證失?。?;

if (ex instanceof GlobalException) {

message = ex.getMessage();

}

throw new GlobalException(message);

}

// 返回結(jié)果

return token;

}

7、測試

public static void main(String[] args) {

// 生成 JWT token

Map map = new HashMap<>(IntegerConsts.FOUR);

map.put(BusinessConsts.LOGIN_NAME, "username");

long time = System.currentTimeMillis() / IntegerConsts.ONE_THOUSAND;

map.put(BusinessConsts.TIME, time);

map.put(BusinessConsts.USER_NAME, "username");

map.put(BusinessConsts.USER_TYPE, "userType");

map.put(BusinessConsts.DISPLAY_NAME, "displayName");

// 暫不需要該參數(shù)

String userAgent = StringUtils.Empty;

StringBuilder builder = new StringBuilder();

/**

* 加密 token 參數(shù)

*/

long EFFECTIVE = IntegerConsts.TWENTY_FOUR * IntegerConsts.SIXTY * IntegerConsts.SIXTY;

String TOKEN_ENCRYPTION = "loginName=%s&effective=%s&time=%s&userAgent=%s";

builder.append(String.format(TOKEN_ENCRYPTION,

"username", EFFECTIVE, time, userAgent));

String tokenValue = Md5Utils.getMd5(builder.toString());

map.put(BusinessConsts.HEADER_TOKEN, tokenValue);

//密鑰

String key = "cdkj-framework-jwt";

String token = JwtUtils.createJwt(map, key, System.currentTimeMillis() + 10000);

try {

JwtUtils.checkToken(token, key, "");

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("JWT加密的結(jié)果:" + token);

System.out.println("JWT解密的結(jié)果:" + parseJwt(token, key));

}

測試結(jié)果

柚子快報激活碼778899分享:Java JWT加密、解密

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19402076.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄