java token登录令牌

一:简介

  1. token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串
    用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个值就是 token 值
    生成完之后将token值返回给前端,前端存储cookie或session中,每次请求接口需要携带token值,后端会进行相应判断,如果过期或者当前值不相同则进行拦截

二:编码

  1. MD5加密
/**
* @Author: guwenhai
* @Description:    MD5加密
* @Date: 11:41 2020/6/11
*/
public static String getMD5Str(String str) {
   byte[] digest = null;
   try {
       MessageDigest md5 = MessageDigest.getInstance("md5");
       digest  = md5.digest(str.getBytes("utf-8"));
   } catch (NoSuchAlgorithmException e) {
       e.printStackTrace();
   } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
   }
   //16是表示转换为16进制数
   String md5Str = new BigInteger(1, digest).toString(16);
   return md5Str;
}
  1. 生成token
/**
* 加密
* @param object 加密数据
* @param maxTime 有效期(毫秒数)
* @param <T>
* @return
*/
public static <T> String encode(T object,long maxTime){
   try{
       //秘钥加密
       final JWTSigner signer=new JWTSigner(SECRET);
       final Map<String ,Object> data=new HashMap<>(10);
       //存入的信息
       data.put(PAYLOAD,object);
       //有效日期时间
       data.put(EXP,System.currentTimeMillis()+maxTime);
       //生成加密字符串
       return signer.sign(data);
   } catch (Exception e) {
       e.printStackTrace();
       return null;
   }
}
  1. 解密token
/**
 * 数据解密
 * @param jwt 解密数据
 * @return
 * @throws Exception
 */
public static ReturnBase decode(String jwt) throws Exception{
    ReturnBase returnData = new ReturnBase(StatusCode.Success);
    //获取秘钥
    final JWTVerifier jwtVerifier=new JWTVerifier(SECRET);
    final Map<String,Object> data=jwtVerifier.verify(jwt);
    //判断数据是否超时或者符合标准
    if(data.containsKey(EXP)&&data.containsKey(PAYLOAD)){
        //有效期时间戳
        long exp = (long) data.get(EXP);
        //当前时间戳
        long currentTimeMillis = System.currentTimeMillis();
        if(exp > currentTimeMillis){
            //解析数据信息
            Map<String,Object> json= (Map<String, Object>) data.get(PAYLOAD);
            returnData.setData(json);
        }else {
            returnData = new ReturnBase(99999,"用户登录超时");
        }
    }else {
        returnData = new ReturnBase(99999,"用户token错误");
    }
    return returnData;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值