package com.irootech.customercloud.common.util;
import com.google.gson.Gson;
import com.irootech.customercloud.bean.UserRegReporBean;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JwtUtil {
public SecretKey generalKey() {
String stringKey = Constant.JWT_SECRET;
byte[] encodedKey = Base64.decodeBase64(stringKey);
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}
public String createJWT(String id, String issuer, String subject, long ttlMillis) throws Exception {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
Map<String, Object> claims = new HashMap<>();
claims.put("userMobile", "186");
claims.put("createDate", "2019-10-22");
claims.put("userName", "name");
claims.put("userCompany", "公司");
claims.put("userCountry", "国家");
SecretKey key = generalKey();
JwtBuilder builder = Jwts.builder()
.setClaims(claims)
.setId(id)
.setIssuedAt(now)
.setIssuer(issuer)
.setSubject(subject)
.signWith(signatureAlgorithm, key);
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
public Claims parseJWT(String jwt) throws Exception {
SecretKey key = generalKey();
Claims claims = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(jwt).getBody();
return claims;
}
private Claims parseJWT1(String jwt) {
SecretKey key = generalKey();
Claims claims = Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary(String.valueOf(key)))
.parseClaimsJws(jwt).getBody();
System.out.println("ID: " + claims.getId());
System.out.println("Subject: " + claims.getSubject());
System.out.println("Issuer: " + claims.getIssuer());
System.out.println("Expiration: " + claims.getExpiration());
return claims;
}
public static void main(String[] args) {
UserRegReporBean user = new UserRegReporBean();
user.setUserCompany("userid");
user.setUserCountry("roleid");
String subject = new Gson().toJson(user);
try {
JwtUtil util = new JwtUtil();
String jwt = util.createJWT(Constant.JWT_ID, "Anson", subject, Constant.JWT_TTL);
System.out.println("JWT:" + jwt);
System.out.println("\n解密\n");
Claims c = util.parseJWT(jwt);
System.out.println(c.getId()+"==111");
System.out.println(c.getIssuedAt()+"==222");
System.out.println(c.getSubject()+"==333");
System.out.println(c.getIssuer()+"==4444");
System.out.println(c.get("userMobile", String.class)+"==5555");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.irootech.customercloud.common.util;
import java.util.UUID;
public class Constant {
public static final String JWT_ID = UUID.randomUUID().toString();
public static final String JWT_SECRET = "1oov55mpqcrqnouup4mchar2ubg5j4hdfldabf3k7094ia0vlj86";
public static final int JWT_TTL = 60*60*1000;
}