| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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;
- }
- }
|