package cn.com.goldenwater.dcproj.utils; import cn.com.goldenwater.dcproj.dto.LoginUser; import io.jsonwebtoken.*; import java.util.Base64; import java.util.HashMap; import java.util.Map; public class JWTTokenUtil { public static final String SECRET = "goldenwatercomcn"; private static final String EXP = "exp"; private static final String PAYLOAD = "payload"; //浙江要求将在线时间加长,在线4小时 public static final long maxAge = 14400000L; public static final long refreshmaxAge = 14400000000L; public static String encode(LoginUser loginUser, String key) { if (SECRET != null && SECRET.length() > 0) { key += SECRET; } //生成签名部分 JwtBuilder jwtBuilder = Jwts.builder(); Map clams = new HashMap<>(); clams.put("persId", new String(base64Encrypt(loginUser.getPersId()))); clams.put("persName", new String(base64Encrypt(loginUser.getPersName()))); clams.put("mobile", new String(base64Encrypt(loginUser.getMobile()))); clams.put("pType", new String(base64Encrypt(loginUser.getpType()))); clams.put(EXP, System.currentTimeMillis() + maxAge); jwtBuilder = jwtBuilder.addClaims(clams).signWith(SignatureAlgorithm.HS256, key); //获取生成的token String token = jwtBuilder.compact(); return token; } public static byte[] base64Encrypt(final String content) { return Base64.getEncoder().encode(content.getBytes()); } /** * base64解密 * * @param encoderContent 已加密内容 * @return byte[] */ public static byte[] base64Decrypt(final byte[] encoderContent) { return Base64.getDecoder().decode(encoderContent); } public static Map decode(String key, String token) throws SignatureException { Claims claims = null; if (SECRET != null && SECRET.length() > 0) { key += SECRET; } claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody(); return claims; } public static String sign(LoginUser object, String keyDesc) { try { return encode(object, keyDesc); } catch (Exception e) { return null; } } //解密,传入一个加密后的token字符串和解密后的类型 public static LoginUser unsign(String jwt, String keyDesc) { try { Map retMap = decode(keyDesc, jwt); LoginUser loginUser = new LoginUser(); loginUser.setMobile(new String(base64Decrypt(retMap.get("mobile").toString().getBytes()))); loginUser.setPersId(new String(base64Decrypt(retMap.get("persId").toString().getBytes()))); loginUser.setPersName(new String(base64Decrypt(retMap.get("persName").toString().getBytes()))); loginUser.setpType(new String(base64Decrypt(retMap.get("pType").toString().getBytes()))); long expire = Long.valueOf(retMap.get(EXP).toString()); long currentTimeMillis = System.currentTimeMillis(); if (expire > currentTimeMillis) { return loginUser; } return null; } catch (Exception e) { return null; } } //获取对象 public static LoginUser getObject(String accessToken, String keyDesc) { Map retMap = decode(keyDesc, accessToken); LoginUser loginUser = new LoginUser(); loginUser.setMobile(new String(base64Decrypt(retMap.get("mobile").toString().getBytes()))); loginUser.setPersId(new String(base64Decrypt(retMap.get("persId").toString().getBytes()))); loginUser.setPersName(new String(base64Decrypt(retMap.get("persName").toString().getBytes()))); loginUser.setpType(new String(base64Decrypt(retMap.get("pType").toString().getBytes()))); return loginUser; } }