jwt-token關鍵代碼示例

jwt-token生成示例

  • jwt-token是前後端分離架構中常用的用戶校驗方案,和session不同,它是無狀態的。
  • 推薦官網去看看:https://jwt.io/
  • 好了,接下來是一些關鍵代碼示例

maven依賴

 io.jsonwebtoken jjwt 0.7.0

生成token的工具類

public class JwtTokenProvider { SecretKeySpec key; /** * @param key * 密鑰(例如:12345678) */ public JwtTokenProvider(String key) { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), SignatureAlgorithm.HS512.getJcaName()); this.key = secretKeySpec; } /** * 生成token *  * @return */ public String createToken(Claims claims) { String compactJws = Jwts.builder().setPayload(JSONObject.toJSONString(claims)) .compressWith(CompressionCodecs.DEFLATE).signWith(SignatureAlgorithm.HS512, key).compact(); return compactJws; } /** token轉換為 */ public Claims parseToken(String token) { try { return Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody(); } catch (Exception e) { e.printStackTrace(); } return null; }}

封裝後的token信息對象userClaims

/** * 權限信息對象 * @author Tony * */public class UserClaims extends JwtMap implements Claims { private String[] scope; private String grantType = "password"; private String userName; // 用戶名 private String email; // 郵箱 private String phone; // 電話號碼 public String[] getScope() { return scope; } public void setScope(String[] scope) { this.scope = scope; setValue("scope", this.scope); } public String getGrantType() { return grantType; } public void setGrantType(String grantType) { this.grantType = grantType; setValue("grantType", this.grantType); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; setValue("userName", this.userName); } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; setValue("email", this.email); } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; setValue("phone", this.phone); } @Override public String getIssuer() { return getString(ISSUER); } @Override public Claims setIssuer(String iss) { setValue(ISSUER, iss); return this; } @Override public String getSubject() { return getString(SUBJECT); } @Override public Claims setSubject(String sub) { setValue(SUBJECT, sub); return this; } @Override public String getAudience() { return getString(AUDIENCE); } @Override public Claims setAudience(String aud) { setValue(AUDIENCE, aud); return this; } @Override public Date getExpiration() { return get(Claims.EXPIRATION, Date.class); } @Override public Claims setExpiration(Date exp) { setDate(Claims.EXPIRATION, exp); return this; } @Override public Date getNotBefore() { return get(Claims.NOT_BEFORE, Date.class); } @Override public Claims setNotBefore(Date nbf) { setDate(Claims.NOT_BEFORE, nbf); return this; } @Override public Date getIssuedAt() { return get(Claims.ISSUED_AT, Date.class); } @Override public Claims setIssuedAt(Date iat) { setDate(Claims.ISSUED_AT, iat); return this; } @Override public String getId() { return getString(ID); } @Override public Claims setId(String jti) { setValue(Claims.ID, jti); return this; } @Override public  T get(String claimName, Class requiredType) { Object value = get(claimName); if (value == null) { return null; } if (Claims.EXPIRATION.equals(claimName) || Claims.ISSUED_AT.equals(claimName) || Claims.NOT_BEFORE.equals(claimName)) { value = getDate(claimName); } if (requiredType == Date.class && value instanceof Long) { value = new Date((Long) value); } if (!requiredType.isInstance(value)) { throw new RequiredTypeException("Expected value to be of type: " + requiredType + ", but was " + value.getClass()); } return requiredType.cast(value); }}

JWTtests 測試代碼

/** * JWT-Token生成 *  * @author Tony * */public class JWTtests { public static void main(String[] args) { // md5("7981798723412342134"); > 簽名 // 密鑰 12345678 JwtTokenProvider jwtTokenProvider = new JwtTokenProvider("12345678"); UserClaims claims = new UserClaims(); claims.setUserName("Tony"); claims.setEmail("[email protected]"); // token有效期 String token = jwtTokenProvider.createToken(claims); System.out.println("生成的token:" + token); // 生成Token Claims userClaims = jwtTokenProvider.parseToken(token); System.out.println("解析出來的Toekn內容:" + userClaims); System.out.println("動腦學院兩週年,現在報名,給你想不到的優惠"); }}
jwt-token關鍵代碼示例


分享到:


相關文章: