//package cn.superdesk.uniorder.utils.security.superdeskapp;
//
//import cn.superdesk.libs.cache.command.RedisString;
//import cn.superdesk.libs.common.SuperdeskBaseException;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.JwtBuilder;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.util.Date;
//
///**
// * @description: 运营中心帐单获取和解析token
// * @author:
// * @create: 2019-11-15
// **/
//public class TokenUtil {
//
//	private static final Logger LOGGER = LoggerFactory.getLogger(TokenUtil.class);
//
//	/**
//	 * 微信用户token有效期 7天
//	 */
//	public static final Integer TOKEN_EXPIRED_TIME = 1000 * 60 * 60 * 24 * 7;
//
//	final static String key = "WeiXinChat@#$%6#*QWECD";//私钥
//
//
//	public static String getToken(String subject) {
//		return getToken(subject, TOKEN_EXPIRED_TIME);
//	}
//
//	public static String getToken(String subject, Integer expiredTime) {
//		//指定签名的时候使用的签名算法
//		SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//		//生成JWT
//		long nowMillis = System.currentTimeMillis();
//		Date now       = new Date(nowMillis);
//
//		long expMillis = nowMillis + ((expiredTime != null && expiredTime.intValue() > 0) ? expiredTime : TokenUtil.TOKEN_EXPIRED_TIME);
//		Date expDate   = new Date(expMillis);
//		JwtBuilder builder = Jwts.builder()
//				.setIssuedAt(now)
//				.setSubject(subject)
//				.setExpiration(expDate)
//				.signWith(signatureAlgorithm, key);
//		return builder.compact();
//	}
//
//
//	/**
//	 * 校验token,只要token失效或者不正确则抛出异常
//	 *
//	 * @param token 加密后的token
//	 * @return
//	 */
//	public static boolean checkToken(String token) {
//		try {
//			Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
//			return true;
//		} catch (Exception e) {
//			LOGGER.info("===== user JWT token expired token过期 =====");
//			throw new SuperdeskBaseException(209, "token过期");
//		}
//	}
//
//	public static boolean checkTokenExpire(String token) {
//		try {
//			Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
//			if (claims == null) {
//				return true;
//			}
//			if (claims.getSubject() == null) {
//				return true;
//			}
//
//			return false;
//		} catch (Exception e) {
//			LOGGER.info("===== user JWT token expired token过期 =====");
//			//	throw new SuperdeskBaseException(209, "token过期");
//			return true;
//		}
//	}
//
//	/**
//	 * 解析token,返回数据
//	 *
//	 * @param token 加密后的token
//	 * @return
//	 */
//	public static String parseToken(String token) {
//
//		try {
//			Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
//			return claims.getSubject();
//		} catch (Exception e) {
//			LOGGER.info("===== user JWT token expired token过期 =====");
//			return null;
//		}
//	}
//
//	/*********************************把真实token存储在redis中,header中的是MD5加密后的字符串(由于token数据量太大)*********************************/
//	/**
//	 * 刷新redis中的jwt
//	 *
//	 * @param token
//	 * @param oldKey
//	 * @param newKey
//	 */
//	public static void refreshClientAppToken(String token, String oldKey, String newKey) {
//		try {
//			// 每次登录成功,重新设置token有效期为7天
//			RedisString oldUserTokenRedis = new RedisString(oldKey);
//			if (oldUserTokenRedis.exists()) {
//				oldUserTokenRedis.remove();
//			}
//			oldUserTokenRedis.resetKey(newKey);
//			oldUserTokenRedis.set(token, TokenUtil.TOKEN_EXPIRED_TIME);
//		} catch (Exception e) {
//			LOGGER.error("app jwt token 刷新失败:\n{}", e.getMessage());
//		}
//	}
//
//	/**
//	 * 获取token
//	 *
//	 * @param key
//	 */
//	public static String getRealToken(String key) {
//		try {
//			// 每次登录成功,重新设置token有效期为7天
//			RedisString userTokenRedis = new RedisString(key);
//			if (userTokenRedis.exists()) {
//				return userTokenRedis.get();
//			}
//		} catch (Exception e) {
//			LOGGER.error("app jwt token 已经过期:\n{}", e.getMessage());
//		}
//		return null;
//	}
//
//
//	public static void main(String[] args) {
//		//JSONObject tokenjson=new JSONObject();
//		//tokenjson.put("userid","11");
//		//	UserInfoVO testvo=new UserInfoVO();
//		//	testvo.setUserId(1);
//		//System.out.println(getUserToken(testvo));
//		//  String claims=	parseToken("eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzQ2NzAwNTAsInN1YiI6IntcImNvbXBJZFwiOjEsXCJ1c2VyVHlwZVwiOjIsXCJ1c2VySWRcIjoyOTAyfSIsImV4cCI6MTU3NTI3NDg1MH0.ITCDDcMOy7BefecFHfnS3hEB2aXInqsOnJVIBD5cRM4");
//		String claims = parseToken("eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzQ2NzQwMzcsInN1YiI6IntcImNvbXBJZFwiOjEsXCJ1c2VyVHlwZVwiOjIsXCJ0b2tlblR5cGVcIjoyLFwidXNlcklkXCI6MjkwMn0iLCJleHAiOjE1NzUyNzg4Mzd9.iEifstHYefbRcdHqoNvS44sRerbRvEJNoqevGKEWPhM");
//		claims = parseToken("eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NzQ5NDAwNzAsInN1YiI6IntcImlkZW50aXR5VHlwZVwiOm51bGwsXCJ2aXJ0SWRcIjoyNTAwLFwidXNlclR5cGVcIjowLFwidG9rZW5UeXBlXCI6MSxcInVzZXJJZFwiOjIxMzAzLFwib3JnSWRcIjo2MTV9IiwiZXhwIjoxNTc1NTQ0ODcwfQ.MexZmeUhyL5Dg4g8mn8wLI0z5XEljJpOQeCnhPPjs8w");
//		System.out.println(claims);
//	}
//
//}
