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关键代码示例


分享到:


相關文章: